ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python多继承下的查找顺序-MRO原则演变与C3算法

2019-06-23 19:03:28  阅读:282  来源: 互联网

标签:原则 python 元素 列表 MRO C3 父类


在python历史版本中的演变史

python2.2之前:

MRO原则:

  只有经典类,遵循深度优先(从左到右)原则,

  存在的问题:在有重叠的多继承中,违背重写可用原则

  解决办法是再设计类的时候不要设计这样有问题的类

 

python2.2版本:

MRO原则:

  经典类:遵循深度优先(从左到右)原则

  引入新式类:优化了结构

    新式类存在的问题:无法检测出有问题的继承,

             有可能还会违背局部优先的原则

            例如:

              

 

python2.3-2.7版本:

MRO原则:

  经典类:遵循深度优先(从左到右)原则

  新式类:C3算法

 

python3.x之后:MRO原则:

  只有新式类:C3算法

 

C3算法详解:

公式:

  L(object) = [ object ]

  L(子类(父类1,父类2)) =  [ 子类 ] + merge(L(父类1) + L(父类2) + [父类1,父类2])

  mergel算法:

    1、第一个列表中的第一个元素如果是后面列表中的首个元素或者在后面列表中不存在,则将这个元素合并到merge函数前面的最终列表中,并删除这个元素

    2、如果第一个列表第一个元素不成立,则查看第二个列表首个元素,执行第1步操作

    3、如果最终无法把所有元素都归到最终的解析列表中,则报错,说明是错误的继承关系

案列代码:

 

    

 

  

标签:原则,python,元素,列表,MRO,C3,父类
来源: https://www.cnblogs.com/jayxuan/p/11073742.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有