类的属性和对象的属性
定义在类中(而不是初始化中的属性)称为类属性
类属性通过 类名.属性 来调用,所有的对象公用的.
在所有的对象中也能调用,通过 对象.属性 调用的属于对象自身.
在对象初始化时, 调用公共的类属性,来赋值自身的对象属性.
class Cat:
count = 0
def __init__(self,name,color):
self.name = name
self.color = color
xh = Cat('小黑','黑色')
xh.count = 3
Cat.count = 5
xb = Cat('小白','白色')
xb.count # 输入为3而不是5,改变类属性并不能改变对象的属性.
在初始化方法中, 可以改变类属性, 实现一个对象计数的功能,每增加一个实例化对象,count就会加1
class Cat:
count = 0
def __init__(self,name,color):
self.name = name
self.color = color
Cat.count += 1
xh = Cat('小黑','黑色')
print(xh.count) # 输出1
print(Cat.count) # 输出1
xb = Cat('小白','白色')
print(Cat.count) # 输出2
print(xb.count) # 输出2
类的私有属性, 将类属性定义为私有
只能在类的内部调用,
定义的方法是在属性前加__(注意:两个下划线)
可以通过内部再定义一个方法,来调用私有属性
通过以上两步,使对象的私有属性变为不能修改,且只能通过方法来调用.
class Cat:
__count = 0
def __init__(self,name,color):
self.name = name
self.color = color
Cat.__count += 1
def count(self):
return self.__count
xh = Cat('小黑','黑色')
print(xh.count()) # 通过对象的方法调用
# print(xb.__count) # 不能通过对象的属性调用,避免了通过对象修改.
以上还可以增加@property装饰器,使方法的调用类似属性
class Cat:
__count = 0
def __init__(self,name,color):
self.name = name
self.color = color
Cat.__count += 1
@property
def count(self):
return self.__count
xh = Cat('小黑','黑色')
print(xh.count) # 在别人看来,好像调用一个属性,其实是一个方法
xh.count = 4 # 由于是方法,所以不能像属性一样去修改,报错
留言