【发布时间】:2014-06-25 03:30:46
【问题描述】:
假设我定义了 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'? 第二个问题:为什么 Ba 和 B.SubA 给出了预期的结果,虽然 'a' 和 'SubA' 都不在 B 的__dict__?
谢谢!
【问题讨论】:
-
基本上它首先尝试解析子类中的名称,然后是它的每个超类,然后是每个超类的超类等,直到它解决或者它没有......至少我认为会发生这种情况
标签: python class oop inheritance