python中的实例变量

Instance variable in python

我在python中是新手,我读到了有关实例变量的内容:

A variable that is defined inside a method and belongs only to the
current instance of a class.

所以我测试它:

考虑此代码:

1
2
3
4
class test:
    count=0
    def __init__(self):
          test.count += 1

我有一个类,在实例化后添加count。我这样做:

1
2
t1=test()
t1.count=100

然后我创建新实例:

1
2
t2=test()
t2.count  # 2

然后创建另一个实例:

1
2
3
t3=test()
t3.count  # 3
t2.count  # 3

然后:

1
t1.count  # I get 100

我的问题是,为什么t2t3是更新的,但是如果改变了具体实例的实例变量的值,实例的实例变量就没有更新?


t2t3中,由于没有定义实例变量count,因此引用,例如t2.count在类范围中查找名称,并对类变量test.count进行评估。

t1中,您创建了一个完全不同的实例变量count,它恰好与类变量同名。因此,t1.count返回这个实例变量。


因为实例属性是影子类属性,但它们是独立的。

当您试图访问t2.count时,没有实例属性(t2.__dict__没有count键),所以python下一步会查看type(t2)以查看是否可以在那里找到该属性。类确实具有这样的属性,因此返回test.count

另一方面,t1.count查找实例属性并返回该属性。不考虑test.count