为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千万里不及你 2021-03-15 16:13:50
有一个代码:class C():    a=1    def f(self):        print "f func"a=C()print a.aa.f()>>> 1>>> f func当我试图获得a.__dict__或时vars(a),它告诉我公正{}。但a.b=123print a.__dict__>>> {'b': 123}我不明白,为什么会这样。
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

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

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


查看完整回答
反对 回复 2021-03-31
?
弑天下

TA贡献1818条经验 获得超8个赞

>>> C.a

1

>>> vars(C)['a']

1

(vars一堂课的整个字典相当长。)


就像您的标题说的那样,它是一个类变量。它属于类,而不是对象。Python在幕后做一些特殊的逻辑,以便在调用时为您查找类型对象a.a。我不是专家,但我怀疑它正在寻找a与找到方法相同的方法。我相信在Java之类的语言中,不建议使用这种用法。我不知道它是否不建议在Python中使用。


查看完整回答
反对 回复 2021-03-31
  • 2 回答
  • 0 关注
  • 276 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号