【发布时间】:2020-10-14 05:28:07
【问题描述】:
我读到类变量在所有实例之间共享。但是我在 Python 终端中尝试过,但它不能这样工作。
我在这里误会了什么?
似乎只有在创建新对象时才使用类变量。是真的吗?
>>> 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})
>>>
【问题讨论】:
-
如果它的类变量尝试使用 classname.variable 名称。前任。 A.b ,您已经创建了对象,并且对于每个对象,它将具有不同的值
-
当您在实例上分配给类变量时,您正在隐藏类变量:
z.b=1
标签: python class object variables nonetype