簡體   English   中英

Class 變量不與 class 實例共享

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM