我刚读过GvR的Method Resolution Order,但我想知道Python's Super is nifty, but you can't use it中是否有以下陈述(我同意这一点)。那么super()
会导致调用MRO中的下一个方法吗?另请注意this comment。
'超级'的一个大问题是它听起来会导致它 superclass要调用的方法的副本。这根本不是 case,它会导致MRO中的下一个方法被调用(...)
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
答案 0 :(得分:1)
看起来两种情况下的预期结果......在第一种情况下,C调用A(MRO中的下一个类)打印“init A”并返回,因此流程返回到C,打印出“init C”并返回。匹配您的输出。
在第二种情况下,C调用A(MRO中的下一个)调用B(MRO中的A旁边)打印“init B”并返回,因此流程返回到A,打印出“init A”并返回到C打印“init C”。