本篇文章给大家分享的是有关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使用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中类的多继承原理是什么