Python多重继承

在 Python 中,一个可以从多个基类派生,类似于 C++。这称为多重继承。
在多重继承中,所有基类的特性都被继承到派生类中。多重继承的语法类似于单继承

例子

class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass
在这里, 多重派生 类派生自 基地 1 和 基数 2 类。
image.png
Python 中的多重继承
这 多重派生 类继承自两者 基地 1 和 基数 2 类。


Python 多级继承

我们也可以从派生类继承。这称为多级继承。它可以是 Python 中的任何深度。
在多级继承中,基类和派生类的特性被继承到新的派生类中。
下面给出了具有相应可视化的示例。
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass
在这里, 派生1 类派生自 根据 类,以及 派生2 类派生自 派生1 班级。
image.png
Python 中的多级继承


Python中的方法解析顺序

Python 中的每个类都派生自object该类。它是 Python 中最基本的类型。
所以从技术上讲,所有其他类,无论是内置的还是用户定义的,都是派生类,所有对象都是object该类的实例。

Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance(“Hello”,object))
在多继承场景中,首先在当前类中搜索任何指定的属性。如果未找到,则以深度优先、左右方式继续搜索父类,而不对同一类进行两次搜索。
因此,在上面的MultiDerived类示例中,搜索顺序是 [ MultiDerived, Base1, Base2, object]。此顺序也称为MultiDerived类的线性化,用于查找此顺序的规则集称为方法解析顺序 (MRO)
MRO 必须防止本地优先排序并提供单调性。它确保一个类总是出现在它的父类之前。在多个父类的情况下,顺序与基类的元组相同。
类的 MRO 可以看作是mro属性或mro()方法。前者返回一个元组,而后者返回一个列表。
>>> MultiDerived.mro (, , , ) >>> MultiDerived.mro() [, , , ]
这是一个更复杂的多重继承示例及其与 MRO 的可视化。
image.png
在 Python 中可视化多重继承

Demonstration of MRO class X: pass class Y: pass class Z: pass class A(X, Y): pass class B(Y, Z): pass class M(B, A, Z): pass # Output: # [, , # , , # , , # ] print(M.mro())
输出
[, , , , , , <类’对象’>]
要了解有关如何计算 MRO 的实际算法,请访问MRO 讨论