为了账号安全,请及时绑定邮箱和手机立即绑定

Animal.count?

在类Animal类内的__init__方法,使用count属性,为什么要写成Animal.count,直接用count不行吗,或者self.count。

正在回答

3 回答

额,那么简单

0 回复 有任何疑惑可以回复我~

因为count是类属性,所以用类名.count,self.*是实例属性,学到后面才知道。:)

1 回复 有任何疑惑可以回复我~

如果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


2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Python3 进阶教程(新版)
  • 参与学习       41896    人
  • 解答问题       236    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

Animal.count?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信