Python类继承和__dict__查找
发布时间:2020-12-20 12:24:32 所属栏目:Python 来源:网络整理
导读:参见英文答案 python get only class attribute no superclasses????????????????????????????????????3个 假设我定义了A类: class A:... a = 1... class SubA:... sub_a = { 'a': 1,'b': 1} 然后我定义继承自A的B类: class B(A):... pass 现在,检查A的__d
参见英文答案 >
python get only class attribute no superclasses????????????????????????????????????3个
假设我定义了A类: >>> class A: ... a = 1 ... class SubA: ... sub_a = { 'a': 1,'b': 1} 然后我定义继承自A的B类: >>> class B(A): ... pass 现在,检查A的__dict__和B的__dict__: >>> A.__dict__ {'a': 1,'__module__': '__builtin__','__doc__': None,'SubA': <class __builtin_ _.SubA at 0x02CAA3E8>} >>> B.__dict__ {'__module__': '__builtin__','__doc__': None} 不知何故,B .__ dict__既不包含’a’也不包含’SubA’. >>> A.a 1 >>> B.a 1 >>> A.SubA <class __builtin__.SubA at 0x02CAA3E8> >>> B.SubA <class __builtin__.SubA at 0x02CAA3E8> 第一个问题:为什么B .__ dict__不包含’a’和’SubA’? 谢谢! 解决方法
@bgporter给了
a good explanation of the behaviour,我只是为了一点点:
如果你的类变量在B .__ dict__中,它将如何运作?每个子类都有自己的a值,与A.a的值无关 – 这不是你所期望的.类变量应该存在一次 – 在该类中. 相反,Python对类进行查找,如果它不存在,则查找它的基类 – 注意这意味着可以在子类中隐藏类变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |