Python MRO层级与多继承机制解析:两段代码输出疑问
Python多继承MRO与super调用逻辑解析
要搞懂这两段代码的输出,核心是先明确类的方法解析顺序(MRO),再理解带参数的super()的工作逻辑。
首先看所有类的继承关系:D多继承B和C,B和C都继承自A。通过D.__mro__可查看MRO顺序,结果为:(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
也就是方法查找优先级是:D → B → C → A → object
第一段代码解析
class A: def fun1(self): print("A") class B(A): def fun1(self): print('B') class C(A): def fun1(self): print("C") class D(B, C): def fun1(self): super(B, self).fun1() obj = D() obj.fun1() # 输出:C
super(B, self)的作用是:在self(即D实例)的MRO链中,找到B的下一个类,再调用该类的fun1方法。
根据MRO顺序,B的下一个类是C,因此最终调用C.fun1(),输出C。
第二段代码解析
class A: def fun1(self): print("A") class B(A): def fun1(self): print("B") class C(A): def fun1(self): print("C") class D(B, C): def fun1(self): super(C, self).fun1() obj = D() obj.fun1() # 输出:A
同理,super(C, self)是在self的MRO链中找到C的下一个类。
根据MRO顺序,C的下一个类是A,因此调用A.fun1(),输出A。
内容的提问来源于stack exchange,提问作者Saisiva A
相关产品推荐
相关产品推荐

