[英]Class variable is not shared with class instances
我讀到 class 變量在所有實例之間共享。 但是我在 Python 終端中嘗試了這個,但它不起作用。
我在這里有什么誤解?
似乎只有在創建新的 object 時才使用 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
屬性,它將返回 class 變量,因為不存在實例變量:
>>> class A():
... b='class'
>>> z = A()
>>> z.b
'class'
當您為zb
賦值時,您正在創建一個名為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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.