Python,super继承的问题,求解答。 20
这里有一段代码:classA(object):def__init__(self):print('A')classB(A):def__init__(self):print(...
这里有一段代码:
class A(object):
def __init__(self):
print('A')
class B(A):
def __init__(self):
print('Start B')
super(B,self).__init__()
print('End B')
class C(A):
def __init__(self):
print('Start C')
super(C,self).__init__()
print('End C')
class D(B,C):
def __init__(self):
print('Start D')
super(D,self).__init__()
print('End D')
D()
输出结果:
Start D
Start B
Start C
A
End C
End B
End D
我大概知道super(B,self).__init__()的意思是把子类B转变成父类A,self这个时候大概是父类的self,然后调用父类的__init__()方法。
可是super(D,self).__init__()由该如何运作的?因为D类同时继承了(B,C)?
我大概知道按照广度优先的方法的顺序,输出 Start D,B,C,A,可视为什么输出完后又能反向输出End C,B,D,它们是如何运作的? 展开
class A(object):
def __init__(self):
print('A')
class B(A):
def __init__(self):
print('Start B')
super(B,self).__init__()
print('End B')
class C(A):
def __init__(self):
print('Start C')
super(C,self).__init__()
print('End C')
class D(B,C):
def __init__(self):
print('Start D')
super(D,self).__init__()
print('End D')
D()
输出结果:
Start D
Start B
Start C
A
End C
End B
End D
我大概知道super(B,self).__init__()的意思是把子类B转变成父类A,self这个时候大概是父类的self,然后调用父类的__init__()方法。
可是super(D,self).__init__()由该如何运作的?因为D类同时继承了(B,C)?
我大概知道按照广度优先的方法的顺序,输出 Start D,B,C,A,可视为什么输出完后又能反向输出End C,B,D,它们是如何运作的? 展开
1个回答
展开全部
这可能需要了解下 python 当中的:
Method Resolution Order (mro)
中文的话,应该是"方法解析顺序".我也是刚查的.
如果你在最后输出 D().__class__.__mro__
你就可以看到 python 是按什么样的顺序处理继承的了.
它给我的输出是:
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
先 D_start - B_start - C_start - A_start - A_end - C_end - B_end - D_end
Method Resolution Order (mro)
中文的话,应该是"方法解析顺序".我也是刚查的.
如果你在最后输出 D().__class__.__mro__
你就可以看到 python 是按什么样的顺序处理继承的了.
它给我的输出是:
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
先 D_start - B_start - C_start - A_start - A_end - C_end - B_end - D_end
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询