如果Base指向另一个,则基类保持不变

时间:2017-03-15 14:06:25

标签: python class super

代码:

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。 为什么???

1 个答案:

答案 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既用于类的名称,也用于绑定到结果对象的变量。