python 中的类变量在 __dict__ 中找不到

Ego*_*rev 4 python

有一段代码:

class C():
    a=1
    def f(self):
        print "f func"

a=C()
print a.a
a.f()
>>> 1
>>> f func
Run Code Online (Sandbox Code Playgroud)

当我试图得到a.__dict__or时vars(a),它告诉我只是{}。但

a.b=123
print a.__dict__
>>> {'b': 123}
Run Code Online (Sandbox Code Playgroud)

我不明白,为什么会这样。

Bre*_*arn 5

查看a.__dict__vars(a)给出 的属性a,这是一个实例。该实例最初没有自己的属性。您在类定义中创建的属性a是类本身的属性,而不是其实例的属性。稍后,当您这样做时a.b = 123,您将在实例上创建一个属性,以便您可以在实例中看到它__dict__a如果您查看 ,您将看到该属性C.__dict__

当您这样做时,Python 会动态查找类上的print a.a属性。它发现该实例没有属性,因此它在类中查找并找到一个属性。这就是打印的值。创建实例时,类属性并没有“复制”到实例中;相反,每次尝试读取实例属性时,Python 都会检查它是否存在于实例中,如果不存在,则会在类中查找它。aCa