我试图了解python中的超级工作方式,并尝试了以下示例:
class A(object):
def __init__(self):
print "in A's init"
class B(object):
def __init__(self):
print "in B's init"
class C(A,B):
def __init__(self):
super(C,self).__init__()
print "In C"
if __name__=="__main__":
c=C()
相当简单..我尝试了以下超级调用(在此处显示结果):
>>> super(B,c).__init__()
>>> super(B,c).__init__()
>>> super(A,c).__init__()
in B's init
>>> super(A,c).__init__()
in B's init
>>> super(A,c).__init__()
in B's init
>>> super(B,c).__init__()
>>> super(C,c).__init__()
in A's init
我不明白为什么super(A,c).__init__()
打印出它在B的初始化?
答案 0 :(得分:9)
Python&#39> super()应该被称为" next-in-mro"因为它不一定要向父母打电话;相反,它可以称为兄弟姐妹。
很容易检查类结构的方法解析顺序:
>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <type 'object'>)
您可以看到 B 是 A 之后的下一个课程。
这种设计的原因是它允许超级调用链访问链中的每个类不超过一次。这支持一种称为&#34;合作多重继承&#34;这有时非常有用。
以下是一些参考资料,包括Dylan的下一个方法的链接,该方法充当了Python的超级()的模型: