python3 多重继承,python3多重继承 – Python3教程

本文详细介绍了Python中的多重继承概念,包括如何创建多继承的类以及多级继承。同时,讨论了方法解析顺序(MRO),它是Python中决定属性和方法查找顺序的规则,遵循深度优先和左到右的原则。通过示例代码展示了如何理解和使用MRO,并提供了检查类MRO的方法。此外,还提及了Python中所有类都继承自object类,以及如何利用MRO处理多继承时的属性冲突。
摘要由CSDN通过智能技术生成

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

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

Python中的多重继承

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

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

例子:

class Base1:

pass

class Base2:

pass

class MultiDerived(Base1, Base2):

pass

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

Python中的多重继承解释

类MultiDerived继承自Base1和Base2。

efd694d89243f50526f07509c9d17db8.png

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

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

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

class Base:

pass

class Derived1(Base):

pass

class Derived2(Derived1):

pass

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

e288f359e6d09589d31dd66a2c48ad56.png

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__

(,

,

,

)

>>> MultiDerived.mro()

[,

,

,

]

下面是一个稍微复杂一点的多重继承示例及其与MRO一起的可视化。

e3c9c04d685eae8fce1adb9fd1b7c656.png

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

# 输出:

# [, ,

# , ,

# , ,

# ]

print(M.mro())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值