我又可以了 发表于 2022-12-8 14:45:57

为什么这个代码会先打印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~

lxping 发表于 2022-12-8 14:59:56

按MRO顺序C、B1、B2、A,那打印不就是反过来么,先打印A -> B2 -> B1 -> C

我又可以了 发表于 2022-12-8 15:33:59

lxping 发表于 2022-12-8 14:59
按MRO顺序C、B1、B2、A,那打印不就是反过来么,先打印A -> B2 -> B1 -> C

意思就是执行顺序是A,B2,B1,C

lxping 发表于 2022-12-8 15:48:14

本帖最后由 lxping 于 2022-12-8 15:51 编辑

因为你的super函数是在print函数前面,所以打印顺序是A,B2,B1,C。如果你把print函数都调整到spuer函数前,那打印顺序就是C,B1,B2,A了。执行顺序就是按照MRO顺序来查找,是C,B1,B2,A。
页: [1]
查看完整版本: 为什么这个代码会先打印B2再是B1啊,按MRO顺序C、B1、B2、A、object,应该先B1再B2...