【发布时间】:2011-04-13 17:30:10
【问题描述】:
首先,让我引用“专家 Python 编程”一书中的一篇文章:
在以下示例中,使用 __init__ 方法调用其基类的 C 类将 让 B 类被调用两次!
class A(object):
def __init__(self):
print "A"
super(A, self).__init__()
class B(object):
def __init__(self):
print "B"
super(B, self).__init__()
class C(A,B):
def __init__(self):
print "C"
A.__init__(self)
B.__init__(self)
print "MRO:", [x.__name__ for x in C.__mro__] #prints MRO: ['C', 'A', 'B', 'object']
C() #prints C A B B
最后,这里是对这里发生的事情的解释:
这是由于使用 C 实例进行的 A.__init__(self) 调用, 从而使 super(A, self).__init__() 调用 B 的构造函数。 换句话说, super 应该用于整个类层次结构。问题是有时 此层次结构的一部分位于第三方代码中。
我不知道为什么“super(A, self).__init__() 调用 B 的构造函数”。请解释一下这一刻。非常感谢。
【问题讨论】:
标签: python