You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:36:02