2014-05-14 41 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