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

Python 如果基类指向另一个基类,则基类保持不变,python,class,super,Python,Class,Super,代码: 当我执行Base=ChildB时,Base在全局框架中指向ChildB,它扩展了前面的Base。由于python是一种动态类型化语言,因此我假设层次关系将发生变化。超级参考将是ChildB>Base(ChildB)>ChildB>Base(ChildB)… 但结果表明,ChildB仍然扩展了原有的基础。 为什么???不要将名为Base的类与最初引用它的Python变量Base混淆 class Base(object): def __init__(self): pr

代码:

当我执行
Base=ChildB
时,Base在全局框架中指向
ChildB
,它扩展了前面的
Base
。由于python是一种动态类型化语言,因此我假设层次关系将发生变化。超级参考将是
ChildB>Base(ChildB)>ChildB>Base(ChildB)…

但结果表明,ChildB仍然扩展了原有的基础。
为什么???

不要将名为
Base
的类与最初引用它的Python变量
Base
混淆

class Base(object):
    def __init__(self):
        print "Base created"


class ChildB(Base):
    def __init__(self):
        super(ChildB, self).__init__()

Base = ChildB
Base()
当定义了
ChildBase
时,名称
Base
仍然绑定到类
Base
,因此这是
ChildBase
的父类,而不管名称
Base
随后绑定到什么

class语句类似于
class Base(object):pass
相当于调用
type

>>> class Base(object): pass
...
>>> class ChildBase(Base): pass
...
>>> Base = ChildBase
>>> Base.__name__
'ChildBase'

标识符
Base
既用于类的名称,也用于绑定到结果对象的变量。

不清楚您实际上在做什么?您可能会发现这篇文章很有用:,它是由这么资深的Ned Batchelder编写的。另请参阅,以获得有关精美图表的简要摘要。@xi:这是我关于从SC到[使用u init_uu()方法理解Python super()的答案]()
Base = type('Base', (object,), {})