代码:
class Base(object):
def __init__(self):
print "Base created"
class ChildB(Base):
def __init__(self):
super(ChildB, self).__init__()
Base = ChildB
Base()
当我执行Base = ChildB
时,Base在全局框架中指向ChildB
,它扩展了之前的Base
。由于python是一种动态类型语言,因此我假设层次关系会发生变化。而MRO的超级参考将是ChildB > Base(ChildB) > ChildB > Base(ChildB) ....
但结果说实话,ChildB仍然延伸原始Base。 为什么???
答案 0 :(得分:1)
请勿将 name 为Base
的类与最初引用它的Python 变量 Base
混淆。
>>> class Base(object): pass
...
>>> class ChildBase(Base): pass
...
>>> Base = ChildBase
>>> Base.__name__
'ChildBase'
定义ChildBase
时,名称Base
仍然绑定到类Base
,因此无论名称是什么ChildBase
,都是Base
的父类{ {1}}随后被绑定。
类语句就像class Base(object): pass
相当于对type
的调用:
Base = type('Base', (object,), {})
标识符Base
既用于类的名称,也用于绑定到结果对象的变量。