在Python中访问静态属性

And*_*dre 13 python

我对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属性访问的故事还有很多.(例如,我没有提到有关描述符的重要规则.)但是上面告诉你最常见的属性访问情况的规则.

  • 应该注意的是,`Property1`和`Property2`不是真正的属性,而仅仅是属性. (2认同)