MST

星途 面试题库

面试题:Python多重继承下父类方法重写及调用的复杂性

假设有类`A`、`B`、`C`,`C`继承自`A`和`B` (`class C(A, B)`),`A`和`B`都有方法`method`。在`C`类中重写`method`方法,当在`C`类的实例中调用`method`方法时,Python是如何确定调用顺序的?如果希望明确调用`A`类的`method`方法应该怎么做?请详细阐述并给出代码示例。
43.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. Python确定调用顺序的方式
    • 在Python中,这种情况涉及到方法解析顺序(Method Resolution Order,MRO)。当在C类的实例中调用method方法时,Python会按照C3线性化算法确定的MRO来查找方法。
    • 对于class C(A, B),MRO首先查找C类本身,如果C类中有method方法,就调用C类的method方法。如果C类中没有找到,就按照继承顺序,先查找A类,再查找B类。
  2. 明确调用A类的method方法的做法
    • 可以使用super()函数结合类名来明确调用A类的method方法。
    • 示例代码如下:
class A:
    def method(self):
        print("This is A's method")


class B:
    def method(self):
        print("This is B's method")


class C(A, B):
    def method(self):
        print("This is C's method")
        super(C, self).method()  # 调用A类的method方法


c = C()
c.method()

在上述代码中,C类重写了method方法,在C类的method方法中,使用super(C, self).method()明确调用了A类的method方法。当调用c.method()时,首先打印This is C's method,然后打印This is A's method。因为C继承自AB,按照MRO,super(C, self).method()会找到A类的method方法。