问答详情
源自:2-5 Python类属性

输出与预期不符

# 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,我现在不是很能理解。求解答

提问者:程序猿_郭文超 2023-06-09 11:37

个回答

  • cloverwang
    2023-10-13 22:59:21

    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)


  • Jump丶
    2023-06-18 05:17:50

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

  • qq_慕移动6403521
    2023-06-13 11:29:23

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