我对Python比较陌生,希望有人可以向我解释以下内容:
class MyClass:
Property1 = 1
Property2 = 2
print MyClass.Property1 # 1
mc = MyClass()
print mc.Property1 # 1
为什么我可以静态地通过MyClass实例访问Property1?
答案 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的故事还有很多。 (例如,我没有提到有关描述符的重要规则。)但是上面告诉你最常见的属性访问情况的规则。