上一章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。
文章图片
另一方面,我们也可以从派生类继承,这称为多级继承,它可以是Python中的任何深度。
在多级继承中,基类和派生类的特性被继承到新的派生类中。
下面给出了一个相应的可视化示例。
class Base:
pass
class Derived1(Base):
pass
class Derived2(Derived1):
pass
这里,Derived1是从Base派生出来的,而Derived2是从Derived1派生出来的。
文章图片
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一起的可视化。
文章图片
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())
推荐阅读
- python3运算符重载 – Python3教程
- python3继承 – Python3教程
- python3对象和类 – Python3教程
- python3面向对象编程 – Python3教程
- java|程序员加班实用贴 | 每日趣闻
- 人工智能|GPT-3(现实版的“贾维斯”(还是真“人工”智能?))
- 人工智能|复旦博士生写了130行代码,用OCR和正则表达式快速搞定核酸报告统计!
- java|复旦博士写了130行代码,2分钟解决繁琐核酸报告核查
- python3自定义异常 – Python3教程