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

输出与预期不符

# Enter a code
class Animal(object):
    instance_count = 0
    def __init__(self,name,age):
        self.name = name
        self.age = age
dog = Animal('doggi',2)
dog.instance_count = dog.instance_count+1
cat = Animal('tom',1)
cat.instance_count = cat.instance_count+1
print(dog.name,dog.age,dog.instance_count)
print(cat.name,cat.age,cat.instance_count)

从课程中讲到的,对象中定义的变量属性是会对 实例化对象进行共享的,并且实例化对象也是可以修改的,对于另一个实例化对象可见的,那么在我这段代码中,

dog.instance_count = dog.instance_count+1

在执行完这段代码后,其类中的instance_count的值应该变成1了,那么在执行下面代码

cat.instance_count = cat.instance_count+1

类二中的instance_count的值应该变成2,但是输出的时候,全都是1,我现在不是很能理解。求解答

正在回答

3 回答

class Animal(object):

    count = 0

    def __init__(self, name, age):

        self.name = name

        self.age = age

        Animal.count += 1

dog = Animal('wang', 3)

cat = Animal('miao', 2)

print(Animal.count)


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

dog.instance_count = dog.instance_count+1 实际上不是在操作类属性 而是在dog实例上新增了一个 instance_count属性,然后你再次访问的时候因为优先级 你访问不到类上的属性了  所以操作类属性最好使用Animal.instance_count

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

instance_count是静态属性,每次实例化都会重新调用instance_count=0这句,所以你的dog,cat调用instance_count时都被初始化为0了,所以即使+1也只是在0的基础上加

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

举报

0/150
提交
取消

输出与预期不符

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