📜  Python中的多重继承(1)

📅  最后修改于: 2023-12-03 15:19:28.638000             🧑  作者: Mango

Python中的多重继承

在Python中,一个类可以从多个父类中继承属性和方法,这就是多重继承。

语法
class SubClass(BaseClass1, BaseClass2, BaseClass3):
    pass

多重继承中,子类继承了多个父类的属性和方法,可以在子类中调用这些父类的方法和属性。

特点

多重继承有以下几个特点:

  • 可以从多个父类中继承属性和方法;
  • 子类可以重写父类的方法,并调用其他父类中的同名方法;
  • 每个父类只会被调用一次,不会被重复调用。
方法解析顺序(MRO)

在多重继承中,如果多个父类中有同名的方法,那么Python会按照一定的顺序来调用这些方法,这个顺序被称为方法解析顺序(MRO)。

Python中的MRO采用的是C3算法,通过继承关系构建一个有向无环图(DAG),然后计算出一个拓扑序列,按照拓扑序列中的顺序来调用方法。

Python中可以通过以下方式来查看一个类的MRO:

print(SubClass.mro())
示例

下面是一个多重继承的示例:

class A:
    def say_hello(self):
        print("Hello from class A")
        
class B:
    def say_hello(self):
        print("Hello from class B")
        
class C(A, B):
    pass

c = C()
c.say_hello() # 输出:Hello from class A

在这个例子中,类C继承了类A和类B的say_hello方法,因为在类C的MRO中,先调用类A的say_hello方法,所以输出结果为Hello from class A。

总结

多重继承是一种有效的代码复用方式,可以让一个类从多个父类中继承属性和方法,但是需要注意处理好MRO中的方法冲突问题。