Animal.count?
在类Animal类内的__init__方法,使用count属性,为什么要写成Animal.count,直接用count不行吗,或者self.count。
在类Animal类内的__init__方法,使用count属性,为什么要写成Animal.count,直接用count不行吗,或者self.count。
2022-02-11
如果count改成__count变成类的私有属性后,在__init__方法里无法直接__count访问类的私有属性,需要Animal.__count,尝试了下self.__count也可以,我理解是__count本身是类的属性,任何一个实例并不单独具有这个属性,但是可以通过实例调用类的get和set方法去修改类的属性,就和直接用类名调用get和set方法效果是一样的,比如下面的代码里animal.set和dog.set都可以修改类的属性__count。
class Animal(object): __count = 0 def __init__(self, name, age): self.name = name self.age = age # __count += 1 # E: referenced before assignment Animal.__count += 1 @classmethod def set_count(cls, count): cls.__count = count @classmethod def get_count(cls): return cls.__count print(Animal.get_count()) # 0 Animal.set_count(2) print(Animal.get_count()) # 2 dog = Animal('shitty', 2) dog.set_count(5) print(Animal.get_count()) # 5
举报