Class 个变量未与 class 个实例共享

Class variable is not shared with class instances

我读到 class 变量在所有实例之间共享。但我在 Python 终端中尝试过,但这种方式不起作用。

我哪里误会了?

似乎class变量只是在创建新对象时才使用。是真的吗?

>>> class A():
...     b=None
...
>>> z=A()
>>> z.b
>>> z.b=1
>>> z.b
1
>>> A.b
>>> A.b=2
>>> A.b
2
>>> z.b  
1         # expected to be 2 instead of 1
>>> x=A()
>>> x.b
2
>>> x.__dict__
{}
>>> z.__dict__
{'b': 1}
>>> A.__dict__
mappingproxy({'__module__': '__main__', 'b': 2, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None})
>>>

如果您创建 A 的实例并尝试读取 b 属性,它将 return class 变量,因为不存在实例变量:

>>> class A():
...     b='class'
>>> z = A()
>>> z.b
'class'

当您为 z.b 赋值时,您正在创建一个名为 b 实例 变量,它隐藏 class 变量:

>>> class A():
...     b='class'
>>> z = A()
>>> z.b = 'instance'
>>> z.b
'instance'

如果想访问class变量而不管是否存在同名实例变量,可以使用__class__:

>>> class A():
...     b='class'
>>> z = A()
>>> z.b = 'instance'
>>> z.b
'instance'
>>> z.__class__.b
'class'