python3多重继承 – Python3教程

上一章Python教程请查看:python3继承
在本文中,你将了解Python中的多重继承是什么,以及如何在程序中使用它,你还将了解多级继承和方法解析顺序。
Python中的多重继承与c++一样,一个类可以派生自Python中的多个基类,这叫做多重继承。
【python3多重继承 – Python3教程】在多重继承中,所有基类的特性都被继承到派生类中,多继承的语法类似于单继承。
例子:

class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass

这里,MultiDerived派生自Base1和Base2类。
Python中的多重继承解释类MultiDerived继承自Base1和Base2。
python3多重继承 – Python3教程

文章图片
另一方面,我们也可以从派生类继承,这称为多级继承,它可以是Python中的任何深度。
在多级继承中,基类和派生类的特性被继承到新的派生类中。
下面给出了一个相应的可视化示例。
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass

这里,Derived1是从Base派生出来的,而Derived2是从Derived1派生出来的。
python3多重继承 – Python3教程

文章图片
Python中的方法解析顺序Python中的每个类都派生自类对象,它是Python中最基本的类型。
因此,从技术上讲,所有其他类,无论是内置的还是用户定义的,都是派生类,所有对象都是object类的实例。
# 输出: True print(issubclass(list,object))# 输出: True print(isinstance(5.5,object))# 输出: True print(isinstance("Hello",object))

在多继承场景中,任何指定的属性都首先在当前类中搜索,如果没有找到,搜索将继续以深度优先、从左到右的方式进入父类,而不会搜索相同的类两次。
因此,在上述多派生类的示例中,搜索顺序是[MultiDerived, Base1, Base2, object]。这个顺序也被称为多导类的线性化,用来发现这个顺序的规则集被称为方法分辨顺序(MRO)。
MRO必须防止局部优先排序,并提供单调性。它确保一个类总是出现在它的父类之前,并且在有多个父类的情况下,顺序与基类的元组相同。
类的MRO可以被看作是_mro__属性或MRO()方法,前者返回一个tuple,而后者返回一个列表。
>>> MultiDerived.__mro__ (< class '__main__.MultiDerived'>, < class '__main__.Base1'>, < class '__main__.Base2'>, < class 'object'>) >>> MultiDerived.mro() [< class '__main__.MultiDerived'>, < class '__main__.Base1'>, < class '__main__.Base2'>, < class 'object'>]

下面是一个稍微复杂一点的多重继承示例及其与MRO一起的可视化。
python3多重继承 &#8211; Python3教程

文章图片
class X: pass class Y: pass class Z: passclass A(X,Y): pass class B(Y,Z): passclass M(B,A,Z): pass# 输出: # [< class '__main__.M'>, < class '__main__.B'>, # < class '__main__.A'>, < class '__main__.X'>, # < class '__main__.Y'>, < class '__main__.Z'>, # < class 'object'>]print(M.mro())

    推荐阅读