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,), {})