我对Python比较陌生,希望有人可以向我解释以下内容:
class MyClass:
Property1 = 1
Property2 = 2
print MyClass.Property1 # 1
mc = MyClass()
print mc.Property1 # 1
Run Code Online (Sandbox Code Playgroud)
为什么我可以静态地通过MyClass实例访问Property1?
unu*_*tbu 29
代码
class MyClass:
Property1 = 1
Run Code Online (Sandbox Code Playgroud)
创建一个MyClass有dict 的类:
>>> MyClass.__dict__
{'Property1': 1, '__doc__': None, '__module__': '__main__'}
Run Code Online (Sandbox Code Playgroud)
注意键值对'Property1': 1.当你说MyClass.Property1,Python在dict中MyClass.__dict__查找键Property1,如果找到它,则返回相关的值1.
>>> MyClass.Property1
1
Run Code Online (Sandbox Code Playgroud)
当您创建类的实例时,
>>> mc = MyClass()
Run Code Online (Sandbox Code Playgroud)
还创建了该实例的dict:
>>> mc.__dict__
{}
Run Code Online (Sandbox Code Playgroud)
注意这个dict是空的.当你说mc.Property1,Python的首先查找mc.__dict__的'Property1'关键.因为它没有在那里找到它,它看起来在类的字典中mc,即MyClass.__dict__.
>>> mc.Property1
1
Run Code Online (Sandbox Code Playgroud)
请注意,Python属性访问的故事还有很多.(例如,我没有提到有关描述符的重要规则.)但是上面告诉你最常见的属性访问情况的规则.