Python C3 算法 手动计算顺序
Python C3 算法 手动计算顺序
手动计算类继承C3算法原则:
- 以所求类的直接子类的数目分成相应部分
- 按照从左往右的顺序依次写出继承关系
- 继承关系第一个第一位,在所有后面关系都是第一个出现的,提取出来,其他都替换掉
- 如果步骤3中不成立,就到后面一部分去找
- 然后继续在后面这部分找,知道找不到,再回到第一部分去找
- 直到结束。
下面上例题,看下如何应用

.从左到右依次写出类继承关系,并分好部分
左边|右边
HGECA,HGEA,HGMX,HGMY|HFDBA,HFDCA,HFECA,HFEA
.合并过程
H GECA,GEA,GMX,GMY|FDBA,FDCA,FECA,FEA
第一部分第一个第一位G,在所有部分均是第一个出现,或者未出现,可以提取
HG ECA,EA,MX,MY|FDBA,FDCA,FECA,FEA
第一部分第一个第一位E,在第一部分均出现在首位,但是在第二部分出现在非首位,所以到到地位部分去找
第二部分第一个第一位F,在所有部分均是第一个出现,或者未出现,可以提取
HGF ECA,EA,MX,MY|DBA,DCA,ECA,EA
现在还在第二部分,第二部分第一个第一位D,在所有部分均是第一个出现,或者未出现,可以提取
HGFD ECA,EA,MX,MY|BA,CA,ECA,EA
第二部分第一个第一位B,在所有部分均是第一个出现,或者未出现,可以提取
HGFDB ECA,EA,MX,MY|A,CA,ECA,EA
第二部分第一个第一位A,在第二部分出现在非首位,去第一部分去找
第一部分第一个第一位E,所有部分均是第一个出现,或者未出现,可以提取
HGFDB ECA,EA,MX,MY|A,CA,ECA,EA
HGFDBE CA,A,MX,MY|A,CA,CA,A
第一部分第一个第一位C,所有部分均是第一个出现,或者未出现,可以提取
HGFDBEC A,A,MX,MY|A,A,A,A
第一部分第一个第一位A,所有部分均是第一个出现,或者未出现,可以提取
HGFDBECA MX,MY|
HGFDBECAM X,Y|
HGFDBECAMXY

D C1 B1 A1,D C1 B1 A2|D C2 B1 A1,D C2 B1 A2,D C2 B2 A2|D C3 B2 A2,D C3 B3 A2,D C3 B3 A3
D C1 B1 A1,C1 B1 A2|C2 B1 A1,C2 B1 A2,C2 B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3
D C1 B1 A1,B1 A2|C2 B1 A1,C2 B1 A2,C2 B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3
D C1 C2 B1 A1,B1 A2|B1 A1,B1 A2,B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3
D C1 C2 B1 A1,A2|A1, A2,B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3
D C1 C2 B1 A1 A2|A2,B2 A2|C3 B2 A2,C3 B3 A2,C3 B3 A3
D C1 C2 B1 A1 C3 A2|A2,B2 A2|B2 A2,B3 A2,B3 A3
D C1 C2 B1 A1 C3 B2 A2|A2,A2|A2,B3 A2,B3 A3
D C1 C2 B1 A1 C3 B2 B3 A2|A2,A2|A2,A2,A3
D C1 C2 B1 A1 C3 B2 B3 A2 A3
D C1 C2 B1 A1 C3 B2 B3 A2 A3
Python C3 算法 手动计算顺序的更多相关文章
- C3算法 和 super
一. Python的继承 多继承 子类继承父类. 继承是为了节省开发时间.提高开发效率 代码得到了重(chong)用 一个类可以拥有多个父类 lass shen_xian: # 定义一个神仙类 de ...
- python多继承下的查找顺序-MRO原则演变与C3算法
在python历史版本中的演变史 python2.2之前: MRO原则: 只有经典类,遵循深度优先(从左到右)原则, 存在的问题:在有重叠的多继承中,违背重写可用原则 解决办法是再设计类的时候不要设计 ...
- python的垃圾回收机制 继承的顺序C3算法
Python垃圾回收 -- 引用计数 -- Python为每个对象维护一个引用计数 -- 当引用计数为0的 代表这个对象为垃圾 -- 标记清除 - ...
- python 面向对象(六)MRO C3算法 super
########################总结################ 面向对象回顾 类:对某一个事物的描述,对一些属性和方法的归类 class 类名: var=123#类变量 def ...
- python学习 day20 (3月27日)----(单继承多继承c3算法)
继承: 提高代码的重用性,减少了代码的冗余 这两个写法是一样的 Wa('青蛙').walk() #青蛙 can walk wa = Wa('青蛙') wa.walk() #青蛙 can walk 1. ...
- python多重继承C3算法
python多重继承的MRO算法选择: 经典方式.Python2.2 新式算法.Python2.3 新式算法(C3).Python 3中只保留了最后一种,即C3算法 C3算法的解析: 1.多继承UML ...
- python中的MRO和C3算法
一. 经典类和新式类 1.python多继承 在继承关系中,python子类自动用友父类中除了私有属性外的其他所有内容.python支持多继承.一个类可以拥有多个父类 2.python2和python ...
- Python多继承的C3算法
C3算法 一.知识点补充: 拓扑排序:在图论中,拓扑排序(Topological Sorting) 是一个 有向无环图(DAG,Directed Acyclic Graph) 的所有顶点的线性序列.且 ...
- 关于Python类的多继承中的__mro__属性使用的C3算法以及继承顺序解释
刚刚学到类的多继承这个环节,当子类继承多个父类时,调用的父类中的方法具体是哪一个我们无从得知,为此,在Python中有函数__mro__来表示方法解析顺序. 当前Python3.x的类多重继承算法用的 ...
随机推荐
- C# .NET锁屏程序(顺带屏蔽任务管理器)
原文:C# .NET锁屏程序(顺带屏蔽任务管理器) 第一步:将窗体的FormBorderStyle设置为none,WindowState设为Maximized 占据整个屏幕. 第二步:使用钩子监控全局 ...
- DJango xadmin 表头和标底设置,显示隐藏和显示
xadmin文件中的xadmin.pyfrom xadmin import views class GlobalSetting(object): site_title = "zwb" ...
- Kinect 开发驱动配置
有几种配置方案 1.openNI+SensorKinect+PCL 的开发环境(pcl 标配) http://blog.csdn.net/chenxin_130/article/details/669 ...
- CPU和GPU双低效,摩尔定律之后一万倍 ——写于TPU版AlphaGo重出江湖之际
本文来自计算机体系结构专家王逵.他认为,“摩尔定律结束之后,性能提升一万倍”不会是科幻,而是发生在我们眼前的事实. 2008年,<三体2:黑暗森林>里写到: 真的很难,你冬眠后不久 ...
- 汉的Unicode编码是6C49,而且通常都是小端存储。汉字的unicode范围是:0x4E00~0x9FA5,即CJK一共20928个字符。GBK有21886个汉字,所以多了958个汉字
小端存储的结果是 49 6C UTF-8有点类似于Haffman编码,它将Unicode编码为:0x00-0x7F的字符,用单个字节来表示:0x80-0x7FF的字符用两个字节表示:0x800-0xF ...
- eclipse 插件编写(四)
前言 前面几篇文章讲了下如果编写简单的eclipse插件,如创建插件项目.编写右键弹出菜单等功能,接下来主要写一下如何生成代码的功能,这一片的功能跟插件本身的编写关联不太大,主要处理插件之后的业务内容 ...
- 高性能JSON解析器及生成器RapidJSON
RapidJSON是腾讯公司开源的一个C++的高性能的JSON解析器及生成器,同时支持SAX/DOM风格的API. 直击现场 RapidJSON是腾讯公司开源的一个C++的高性能的JSON解析器及生成 ...
- 实现Qt日志功能并输出到文件(使用qInstallMsgHandler安装customMessageHandler)good
原文 http://www.cppblog.com/lauer3912/archive/2011/04/10/143870.html 一.基本分类:qDebug : 调试信息提示qWarning: 一 ...
- Windows服务(system权限)程序显示界面与用户交互,Session0通知Session1里弹出对话框(真的很牛) good
源码资源下载:http://download.csdn.net/detail/stony1980/4512984 1.VC2008中编写“Windows服务”(Windows Service)程序 ...
- 【Web前端Talk】“用数据说话,从埋点开始”-带你理解前端的三种埋点
埋点到底是什么呢? 引用自百科的原话是,埋点分析网站分析的一种常用的数据采集方法.因此其本质是分析,但是靠什么分析呢?靠埋点得到的数据.通俗来讲,就是当我想要在某个产品上得到用户的一些行为数据用来分析 ...