super在python中真正做什么

super在python中真正做什么,python,object,initialization,Python,Object,Initialization,我刚刚读过GvR,但我想知道下面的陈述是否正确(我同意这一点)。所以super()导致调用MRO中的下一个方法?也注意到 “超级”的一个大问题是,听起来它会导致 要调用的方法的超类副本。这根本不是问题所在 在这种情况下,它会导致调用MRO中的下一个方法(…) 给予 当 给予 看起来这两种情况下的预期结果。。。在第一种情况下,C调用A(MRO中的下一个类),A打印“init A”并返回,所以流返回到C,C打印“init C”并返回。匹配您的输出 在第二种情况下,C调用A(MRO中的下一个),A调用

我刚刚读过GvR,但我想知道下面的陈述是否正确(我同意这一点)。所以
super()
导致调用MRO中的下一个方法?也注意到

“超级”的一个大问题是,听起来它会导致 要调用的方法的超类副本。这根本不是问题所在 在这种情况下,它会导致调用MRO中的下一个方法(…)

给予

给予


看起来这两种情况下的预期结果。。。在第一种情况下,C调用A(MRO中的下一个类),A打印“init A”并返回,所以流返回到C,C打印“init C”并返回。匹配您的输出


在第二种情况下,C调用A(MRO中的下一个),A调用B(MRO中的A旁边),B打印“init B”并返回,因此流返回到A,A打印“init A”,返回到C,C打印“init C”

所以。。。你的问题是什么?super()导致调用MRO中的下一个方法?是的。您是否检查了您链接的文章中的示例,即?示例1-2中的mro是[E、C、A、D、B、object]。E和C的init方法都有一个arg,但A的init方法没有arg,所以在A的init方法中抛出异常(
\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。多重继承很棘手,但这是另一个话题。
class A(object):
    def __init__(self):
        #super(A, self).__init__()
        print 'init A'

class B(object):
    def __init__(self):
        print 'init B'

class C(A, B):
    def __init__(self):
        super(C, self).__init__()
        print 'init C'

c = C()
init A
init C
class A(object):
    def __init__(self):
        super(A, self).__init__()
        print 'init A'

class B(object):
    def __init__(self):
        print 'init B'

class C(A, B):
    def __init__(self):
        super(C, self).__init__()
        print 'init C'

c = C()
init B
init A
init C