个性化阅读
专注于IT技术分析

python3多重继承 – Python3教程

上一章Python教程请查看:python3继承

在本文中,你将了解Python中的多重继承是什么,以及如何在程序中使用它,你还将了解多级继承和方法解析顺序。

Python中的多重继承

与c++一样,一个类可以派生自Python中的多个基类,这叫做多重继承。

在多重继承中,所有基类的特性都被继承到派生类中,多继承的语法类似于单继承。

例子:

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

这里,MultiDerived派生自Base1和Base2类。

Python中的多重继承解释

类MultiDerived继承自Base1和Base2。

Python中的多重继承

另一方面,我们也可以从派生类继承,这称为多级继承,它可以是Python中的任何深度。

在多级继承中,基类和派生类的特性被继承到新的派生类中。

下面给出了一个相应的可视化示例。

class Base:
    pass
class Derived1(Base):
    pass
class Derived2(Derived1):
    pass

这里,Derived1是从Base派生出来的,而Derived2是从Derived1派生出来的。

Python中的多重继承02

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一起的可视化。

多重继承可视化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

# 输出:
# [<class '__main__.M'>, <class '__main__.B'>,
# <class '__main__.A'>, <class '__main__.X'>,
# <class '__main__.Y'>, <class '__main__.Z'>,
# <class 'object'>]

print(M.mro())
赞(0)
未经允许不得转载:srcmini » python3多重继承 – Python3教程

评论 抢沙发

评论前必须登录!