2014-05-14 261 views
1

類的頂級屬性,我想了解以下情況:在哪裏存儲在Python

>>> class Test: 
...  a = 1 
... 
>>> x = Test() 
>>> x.__dict__ 
{} 
>>> x.a 
1 
>>> x.__dict__ 
{} 
>>> x.a = 1 
>>> x.__dict__ 
{'a': 1} 

哪裏a屬性存儲在開始和怎麼就變成了__dict__可見只有在分配後?

回答

4

它們存儲類本身:

>>> class Test: 
...  a = 1 
... 
>>> Test.__dict__ 
{'a': 1, '__module__': '__main__', '__doc__': None} 

Python的首先查找在實例屬性,然後到類。

+0

爲什麼'x.a = 1'創建實例屬性而不是改變類屬性? – Mkoch

+0

如果我在類中說'a = []',那麼'x.a.append(2)'會改變class屬性。如果現在我實例化一個新實例,讓我們說'y','y.a'也是'[2]'。 – Mkoch

+0

'append'不會更改類屬性,它會更改由class屬性引用的對象。而且每個類的實例都有相同的對象,所以對象的內容也是一樣的。 – Daniel