面试题答案
一键面试方法解析顺序(MRO)的确定
在Python中,多继承时MRO采用C3线性化算法。其主要规则如下:
- 子类会先于父类被检查。
- 多个父类会根据它们在列表中的顺序被检查。
- 如果对下一个类存在两个合法选择,选择第一个父类。
例如,对于如下继承结构 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,可以清晰、可预测地确定方法调用顺序。