在Python中访问静态属性

时间:2010-07-05 12:36:11

标签: python

我对Python比较陌生,希望有人可以向我解释以下内容:

class MyClass:
  Property1 = 1
  Property2 = 2

print MyClass.Property1 # 1
mc = MyClass()
print mc.Property1 # 1

为什么我可以静态地通过MyClass实例访问Property1?

1 个答案:

答案 0 :(得分:29)

代码

class MyClass:
  Property1 = 1

创建一个具有dict的类MyClass

>>> MyClass.__dict__
{'Property1': 1, '__doc__': None, '__module__': '__main__'}

注意键值对'Property1': 1。 当您说MyClass.Property1时,Python在字典MyClass.__dict__中查找键Property1,如果找到它,则返回关联的值1

>>> MyClass.Property1
1

创建类的实例时,

>>> mc = MyClass()

还创建了该实例的dict:

>>> mc.__dict__
{}

注意这个dict是空的。当您说mc.Property1时,Python首先会在mc.__dict__中查找'Property1'密钥。由于它没有在那里找到它,它在mc的类的字典中查找,即MyClass.__dict__

>>> mc.Property1
1

请注意Python attribute access的故事还有很多。 (例如,我没有提到有关描述符的重要规则。)但是上面告诉你最常见的属性访问情况的规则。