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,它们是如何运作的?
展开
 我来答
№不要问我6446c7b
2016-05-28 · TA获得超过825个赞
知道小有建树答主
回答量:494
采纳率:100%
帮助的人:473万
展开全部
这可能需要了解下 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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式