加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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’?
第二个问题:为什么B.a和B.SubA给出了预期的结果,虽然’a’和’SubA’都不在B的__dict__中?

谢谢!

解决方法

@bgporter给了 a good explanation of the behaviour,我只是为了一点点:

如果你的类变量在B .__ dict__中,它将如何运作?每个子类都有自己的a值,与A.a的值无关 – 这不是你所期望的.类变量应该存在一次 – 在该类中.

相反,Python对类进行查找,如果它不存在,则查找它的基类 – 注意这意味着可以在子类中隐藏类变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读