Python中类的多继承原理是什么

  介绍

本篇文章给大家分享的是有关Python中类的多继承原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、Python不同版本的类

<李>

Python2.2之前是没有共同的祖先的,之后引入对象类,它是所有类的共同祖先类对象

<李>

Python2中为了兼容,分为古典类(旧式类)和新式类

<李>

Python3中全部都是新式类

<李>

新式类都是继承自对象的,新式类可以使用超级

#古典类在python2.x中运行   class :通过   ,   打印(dir (A)),,,,,,,,,,,, #,,,, (& # 39; __doc__& # 39;,, & # 39; __module__& # 39;】   打印(A.__bases__),,,,,,,, #,,,, ()   a =, (),,,,   打印(a.__class__),,,,,,,, #,,,,, __main__.A ,,   print(类型(a)),,,,,,,,,,,, #,,,, & lt; type  & # 39;实例# 39;在

新式类

#新式类在python3.x中运行   B: class 通过   ,   打印(dir (B)),,, #,,, (& # 39; __class__进行# 39;,,& # 39;__delattr__& # 39;,, & # 39; __dict__& # 39;,, & # 39; __dir__& # 39;,, & # 39; __doc__& # 39;,, & # 39; __eq__& # 39;,, & # 39; __format__& # 39;,, & # 39; __ge__& # 39;,, & # 39; __getattribute__& # 39;,, & # 39; __gt__& # 39;,, & # 39; __hash__& # 39;,, & # 39; __init__ # 39;,, & # 39; __init_subclass__& # 39;,, & # 39; __le__& # 39;,, & # 39; __lt__& # 39;,, & # 39; __module__& # 39;,, & # 39; __ne__& # 39;,, & # 39; __new__& # 39;,, & # 39; __reduce__& # 39;,, & # 39; __reduce_ex__& # 39;,, & # 39; __repr__& # 39;,, & # 39; __setattr__& # 39;,, & # 39; __sizeof__& # 39;,, & # 39; __str__& # 39;,, & # 39; __subclasshook__& # 39;,, & # 39; __weakref__& # 39;】   打印(B.__bases__),, #,,, (& lt; class  & # 39;对象# 39;祝辞,)   B =, B ()   打印(B.__class__),, #,,, & lt; class  & # 39; __main__.B& # 39;比;   print(类型(B)),,,,,, #,,, & lt; class  & # 39; __main__.B& # 39;在

二,多继承

<强> (OCP原则:多用“继承”,少修改

继承的用途:增强基类,实现多态

多态

<李>

在面向对象中,父类,子类通过继承联系在一起,如果可以通过一套方法,就可以实现不同变现,就是多态

<李>

一个类继承自多个类就是多继承它将具有多个类的特征

三,多继承弊端

多继承很好的模拟了世界,因为事务很少单一继承,但是舍弃简单,必然引入复杂性,带来了冲突

如同一个孩子继承了来自父母双方的特征,那么到底眼睛像爸爸还是妈妈尼?孩子究竟改像谁多一点尼?

多继承的实现会导致编译器设计的复杂度增加,所以现在很多语言舍弃了类的多继承

c++支持多继承;Java舍弃了多继承

<李>

Java中,一个类可以实现多个接口,一个接口也可以继承多个接口. Java的接口很纯粹,只是方法声明,继承者必须实现这些方法,就具有了这些能力,就能干什么

多继承可能会带来二义性,例如,猫和狗都继承自动物类,现在一个类多继承了猫和狗类,猫和狗都有了喊方法,子类究竟继承谁的喊尼?

<李>

解决方案:实现了多继承的语言,要解决二义性,深度优先或者广度优先

四,Python多继承实现

class  ClassName(基类列表):   ,,,类体

 Python中类的多继承原理是什么

多继承带来的路径选择问题,究竟继承那个父类的特征尼?

<李>

究竟先广度优先,还是深度优先

<强> Python使用MRO(方法解析顺序)解决类搜索顺序问题。

<李>

经典算法,按照定义从左到右,深度优先策略【比如Python2.2之前,左图的MRO算法,MyClass→D B→→→C→】

<李>

新式类算法,经典算法的升级,重复的只保留最后一个。【左图MRO是:MyClass→B→C D→→→对象】

<李>

C3算法,在类被创建出来的时候,就计算除一个MRO有序列表。【Python3唯一支持的算法,左图中MRO是MyClass→B→C D→→→对象】C3过于复杂,没必要去记,我们只要记住【object.mro(),显示继承的方法,从左到右依次查找】

五,多继承的缺点

当类很多,继承复杂的情况下,继承路径太多,很难说清什么样的继承路径

Python中类的多继承原理是什么