有一段代码:
class C():
a=1
def f(self):
print "f func"
a=C()
print a.a
a.f()
>>> 1
>>> f func
当我试图得到a.__dict__
or vars(a)
,它告诉我只是{}
.
But
a.b=123
print a.__dict__
>>> {'b': 123}
我不明白,为什么会这样。
看着a.__dict__
or vars(a)
给你属性a
,这是一个实例。该实例最初没有自己的属性。属性a
您在类定义中创建的属性是类本身的属性,而不是其实例的属性。稍后当你这样做时a.b = 123
,您只在实例上创建一个属性,这样您就可以在实例中看到它__dict__
。你会看到属性a
如果你看C.__dict__
.
当你这样做时print a.a
、Python动态查找属性a
在课堂上C
。它看到该实例没有属性a
,因此它会查看班级并在那里找到一个。这就是打印的值。创建实例时,类属性并没有“复制”到实例中;相反,每次尝试读取实例属性时,Python 都会检查它是否存在于实例中,如果不存在,则会在类中查找它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)