为什么这个代码会先打印B2再是B1啊,按MRO顺序C、B1、B2、A、object,应该先B1再B2...
>>> class A:... def __init__(self):
... print("哈喽,我是A~")
...
>>> class B1(A):
... def __init__(self):
... super().__init__()
... print("哈喽,我是B1~")
...
>>> class B2(A):
... def __init__(self):
... super().__init__()
... print("哈喽,我是B2~")
...
>>> class C(B1, B2):
... def __init__(self):
... super().__init__()
... print("哈喽,我是C~")
...
>>> c = C()
哈喽,我是A~
哈喽,我是B2~
哈喽,我是B1~
哈喽,我是C~ 按MRO顺序C、B1、B2、A,那打印不就是反过来么,先打印A -> B2 -> B1 -> C lxping 发表于 2022-12-8 14:59
按MRO顺序C、B1、B2、A,那打印不就是反过来么,先打印A -> B2 -> B1 -> C
意思就是执行顺序是A,B2,B1,C 本帖最后由 lxping 于 2022-12-8 15:51 编辑
因为你的super函数是在print函数前面,所以打印顺序是A,B2,B1,C。如果你把print函数都调整到spuer函数前,那打印顺序就是C,B1,B2,A了。执行顺序就是按照MRO顺序来查找,是C,B1,B2,A。
页:
[1]