关于super()函数
class A():
def __init__(self):
print('enterA')
print('leaveA')
class B(A):
def __init__(self):
print('enterB')
super().__init__()
print('leaveB')
class C(A):
def __init__(self):
print('enterC')
super().__init__()
print('leaveC')
class D(B,C):
def __init__(self):
print('enterD')
super().__init__()
print('leaveD')
d = D()
执行结果为:
enterD
enterB
enterC
enterA
leaveA
leaveC
leaveB
leaveD
能请讲解下问什么是这样的执行顺序吗,重复的部分也只调用一次
正在回答
同学你好:
B、C继承于A,D继承于B,C,形成闭合的条件。
同学继承的顺序是先继承B,再继承C。
那么继承调用的顺序为(MRO:方法解析顺序):
同学所有子类中都定义了继承父类的构造函数,那么执行的顺序。参考红线(广度遍历)。
从D开始执行代码,遇到继承的构造函数,那么向下寻找到B,执行B的构造函数代码,遇到B中有继承构造函数,继续向下寻找到C,执行C中的构造函数代码,遇到C中有继承构造函数,继续寻找到A。执行A构造函数中的代码,然后返回执行剩余没有执行完的代码。
代码的执行顺序根据上面顺序执行。
B和C其中C没有继承A的构造函数,由于B中继承了构造函数,那么会继续向下寻找到C,执行C中的构造函数,C中没有继承A的构造函数,结束代码的执行。
如果我解决了同学的问题,请采纳!学习愉快^_^。
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星