在Python2.X和Python3.X有很多不同的地方,其中一个区别就是和继承有关。

在Python3.X中,一个类如果没有指明其继承哪个类的时候,其默认就是继承object类。

而在Python2.X就没有这个默认这个选项。

和继承有关的另外一个区别就是在多继承的时候,Python2.X在多继承中,使用的深度优先搜索规则,而Python3.X使用的并不是大家所以为的广度优先算法,而是C3算法,只是在大多数情况下,C3算法的结果恰巧符合广度优先算法的结果。

此处应有示例。

关于C3算法, 在Python官方文档中是这样解释的:

  take the head of the first list, i.e L[B1][0]; if this head is not in the tail of any of the other lists, then add it to the linearization of C and remove it from the lists in the merge, otherwise look at the head of the next list and take it, if it is a good head. Then repeat the operation until all the class are removed or it is impossible to find good heads. In this case, it is impossible to construct the merge, Python 2.3 will refuse to create the class C and will raise an exception.

C3算法的本质就是Merge, 不断地把mro()函数返回的队列进行Merge,规则如下:

  (1)如果第一个序列的第一个元素,是后续序列的第一个元素,或者在后续序列中没有再次出现,则将这个元素合并到最终的方法解析顺序序列中, 并从当前操作的全部序列中删除。

  (2)如果不符合,则跳过此元素,查找下一个列表的第一个元素,重复1的判断规则。

例如,有段代码的如下:

此处应有代码

那么它的C3算法的推测步骤就是

mro(A) = [AO]
mro(B) = [B] + merge(mro(A))
= [B] + merge([AO])
= [BA] + merge([O])
= [BAO]
mro(C) = [C] + merge(mro(A))
= [CAO]
mro(D) = [D] + merge(mro(B)+mro(C) + [BC])
= [D] + merge([BAO],[CAO],[BC])
= [DB] + merge([AO],[CAO],[C])
= [DBC] + merge([AO],[AO])
= [DBCA] + merge([O],[O])
= [DBCAO]

最新文章

  1. HTML5- Canvas入门(四)
  2. jQuery实现瀑布流
  3. siege详解
  4. September 8th 2016 Week 37th Thursday
  5. PHPExcel创建文件格式写入对象实例
  6. 001.linux下clock()检测程序运行时间
  7. iOS开发——实用篇Swift篇&状态栏操作
  8. IPC:Sockets
  9. equals()和hashCode()区别?
  10. 代码写解压zip文件
  11. GlusterFS无法启动原因及处理方案
  12. 2729: [HNOI2012]排队
  13. css基础学习---简单理解
  14. 聊一聊我的阿里云ECS云主机
  15. Linux安装pytorch的具体过程以及其中出现问题的解决办法
  16. 还在繁琐的敲MVP接口和实现类吗,教你一秒搞定。
  17. 恢复数据库的redo日志文件(由于异常关机引起)
  18. Python知识点小记
  19. H5即时通讯Websocket
  20. js获取时间戳(new date()参数获取)

热门文章

  1. mysql批量修改数据库表引擎
  2. eclipse 创建聚合maven项目(转)
  3. Core项目部署到IIS上delete、put谓词不支持
  4. YOLO 学习之路
  5. shake.js实现微信摇一摇功能
  6. canvas-绘制矩形-读书笔记
  7. 安卓开发之SimpleAdapter的使用
  8. Google 停止推出 Chrome 79
  9. 从Windows文件夹到Linux分区
  10. Centos7 docker、harbor 安装配置