如果我創建一個類A
如下:爲什麼我的實例變量不在__dict__中?
class A:
def __init__(self):
self.name = 'A'
檢查的__dict__
成員看起來像{'name': 'A'}
然而,如果我創建一個類B
:
class B:
name = 'B'
__dict__
是空的。
是什麼兩者之間的區別,以及爲什麼在B
的__dict__
不name
顯示出來?
如果我創建一個類A
如下:爲什麼我的實例變量不在__dict__中?
class A:
def __init__(self):
self.name = 'A'
檢查的__dict__
成員看起來像{'name': 'A'}
然而,如果我創建一個類B
:
class B:
name = 'B'
__dict__
是空的。
是什麼兩者之間的區別,以及爲什麼在B
的__dict__
不name
顯示出來?
B.name
是一個類屬性,而不是一個實例屬性。它出現在B.__dict__
,但不在b = B(); b.__dict__
。
這個區別在某種程度上被掩蓋了,因爲當你訪問一個實例的屬性時,類字典是一個後備。所以在上面的例子中,b.name
會給你B.name
的值。
class A:
def _ _init_ _(self):
self.name = 'A'
a = A()
創建對類型A的對象實例的一個屬性,它因此可以找到:a.__dict__
class B:
name = 'B'
b = B()
創建在B類的屬性和屬性可以在B.__dict__
替代地發現如果您有B類型的實例b,您可以在b.__class__.__dict__