MST

星途 面试题库

面试题:Python多继承中的MRO问题

在Python中进行多继承时,解释一下方法解析顺序(MRO)是如何确定的,并举例说明MRO对类中方法调用的影响。
23.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

方法解析顺序(MRO)的确定

在Python中,多继承时MRO采用C3线性化算法。其主要规则如下:

  1. 子类会先于父类被检查。
  2. 多个父类会根据它们在列表中的顺序被检查。
  3. 如果对下一个类存在两个合法选择,选择第一个父类。

例如,对于如下继承结构 class C(A, B),Python会从C开始,然后按照从左到右的顺序检查A和B及其祖先类,保证每个类只被访问一次,并且创建一个线性化的顺序。

MRO对类中方法调用的影响

假设存在以下代码示例:

class A:
    def method(self):
        print("Method from A")


class B:
    def method(self):
        print("Method from B")


class C(A, B):
    pass


obj = C()
obj.method()

在上述代码中,类C继承自A和B。根据MRO,由于A在继承列表中排在B之前,当调用obj.method()时,会调用A类中的method方法,输出Method from A。如果没有MRO规则,Python将难以确定在多继承情况下应该调用哪个父类的方法。通过MRO,可以清晰、可预测地确定方法调用顺序。