访问Python中的静态属性

13 投票
1 回答
6724 浏览
提问于 2025-04-16 00:50

我对Python还比较陌生,希望有人能给我解释一下以下内容:

class MyClass:
  Property1 = 1
  Property2 = 2

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

为什么我可以通过类名直接访问Property1,也可以通过MyClass的实例访问它呢?

1 个回答

30

这段代码

class MyClass:
  Property1 = 1

创建了一个叫做 MyClass 的类,这个类里面有一个字典:

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

注意这个键值对 'Property1': 1。当你输入 MyClass.Property1 时,Python 会在字典 MyClass.__dict__ 中查找键 Property1,如果找到了,就会返回对应的值 1

>>> MyClass.Property1
1

当你创建这个类的一个实例时,

>>> mc = MyClass()

这个实例也会有一个字典:

>>> mc.__dict__
{}

注意这个字典是空的。当你输入 mc.Property1 时,Python 首先会在 mc.__dict__ 中查找 'Property1' 这个键。因为在这里找不到,所以它会去查找 mc 所属类的字典,也就是 MyClass.__dict__

>>> mc.Property1
1

需要注意的是,关于 Python 属性访问 的内容还有很多(比如我还没有提到关于描述符的重要规则)。不过上面的内容已经解释了大多数常见的属性访问规则。

撰写回答