c3算法详解
c3 算法
求某一类在多继承中的继承顺序:
类的mro == [类] + [父类的继承顺序] + [父类2的继承顺序]
如果从左到右的第一个类在后面的顺序中出现,那么就提取出来到mro顺序中
[ABCD] + [EO] --> A = [BCD] + [EO]
如果从左到右的第一个类在后面的顺序中出现,且在后面的顺序中也是第一位,那么就提出来到mro顺序中
[ABCD] + [AEO] --> A = [BCD] + [EO]
如果从左到右的第一个类在后面的顺序中出现,但不是在第一位,那么应该继续往后找,找到符合规则的项目
[ABCD] + [EAO] --> E = [ABCD] + [AO]
[ABCD] + [EAO] + [GEO] --> G = [ABCD] + [EAO] + [EO]
[ABCD] + [EAO] + [EO] --> GE = [ABCD] + [AO] + [O]
关键结论:
这个类没有发生继承,他的顺序永远是[类o]
只要是单继承,不是多继承,那么mro顺序就是从子类到父类的顺序
例子:
L(G) = [G] + [O]
G = [O]
= GO
L[E] = EO
L[F] = [F] + [GO]
F = [GO]
= FGO
L[B] = [B] + [FGO]
B = [FGO]
BF = [GO]
BFG= [O]
= BFGO
L[C] = [C] + [EO]
C = [EO]
CE = [O]
= CEO
L[D] = [D] + [GO]
D = [GO]
DG = [O]
= DGO
L[A] = [A] + [BFGO] + [CEO] + [DGO]
A = [BFGO] + [CEO] + [DGO]
AB = [FGO] + [CEO] + [DGO]
ABF= [GO] + [CEO] + [DGO]
ABFC= [GO] + [EO] + [DGO]
ABFCE= [GO] + [O] + [DGO]
ABFCED = [GO] + [O] + [GO]
ABFCEDG= [O] + [O] + [O]
= ABFCEDGO 提示:只要是单继承,不是多继承,那么mro顺序就是从子类到父类的顺序
例子2:
L[G] = GO
L[D] = DO
L[E] = EGO
L[F] = FO
L[B] = [B] + [DO] + [EGO]
B = [DO] + [EGO]
BD = [O] + [EGO]
BDE = [O] + [GO]
BDEG = [O] + [O]
= BDEGO
L[C] = [C] + [DO] + [FO]
C = [DO] + [FO]
CD = [O] + [FO]
CDF= [O] + [O]
= CDFO
L[A] = [A] + [BDEGO] + [CDFO]
A = [BDEGO] + [CDFO]
AB = [DEGO] + [CDFO]
ABC = [DEGO] + [DFO]
ABCD = [EGO] + [FO]
ABCDE= [GO] + [FO]
ABCDEG= [O] + [FO]
ABCDEGF= [O] + [O]
L[A] = ABCDEGFO
c3算法详解的更多相关文章
- BM算法 Boyer-Moore高质量实现代码详解与算法详解
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...
- kmp算法详解
转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- [转] KMP算法详解
转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的K ...
- 【转】AC算法详解
原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...
- KMP算法详解(转自中学生OI写的。。ORZ!)
KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句 ...
- EM算法详解
EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...
- Tarjan算法详解
Tarjan算法详解 今天偶然发现了这个算法,看了好久,终于明白了一些表层的知识....在这里和大家分享一下... Tarjan算法是一个求解极大强联通子图的算法,相信这些东西大家都在网络上百度过了, ...
- 安全体系(二)——RSA算法详解
本文主要讲述RSA算法使用的基本数学知识.秘钥的计算过程以及加密和解密的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 1.概述 ...
随机推荐
- oracle备份恢复之recover database的四条语句区别
1 recover database using backup controlfile2 recover database until cancel3 recover database usin ...
- Intellij Idea免费激活方法(转)
文章转自 http://blog.csdn.net/u013772876/article/details/70763759 1.填入下面的license server: http://intelli ...
- Mysql数据库的加密与解密
数据加密.解密在安全领域非常重要.对程序员而言,在数据库中以密文方式存储用户密码对入侵者剽窃用户隐私意义重大. 有多种前端加密算法可用于数据加密.解密,下面我向您推荐一种简单的数据库级别的数据加密.解 ...
- Qt+Qgis二次开发:地理实体抽象
1 概述 地理实体抽象是指点.线.面及其组合而成的,用于描述实际地物的数据结构. 其中包含几何实体和属性数据. GIS中进行几何操作,以各种实体类为基础进行操作. 在OGC中,地理实体可以由WKT表 ...
- 关于原型继承中的constructor重定向的问题
上代码 function SuperType(name){ this.name = name; this.colors = ["red","blue",&quo ...
- Zabbix 3.4.2 install && Configuration
原理: 1)zabbix server:负责接收agent发送的报告信息的核心组件,所有配置.统计数据及操作数据都由它组织进行: 2)database storage:专用于存储所有配置信息,以及由z ...
- windows7系统下配置开发环境 python2.7+pyqt4+pycharm
python2.7 链接:https://pan.baidu.com/s/1lPI9AF9GCaakLXsMZLd5mQ 提取码:5xt6 pip 链接:https://pan.baidu.com/s ...
- linux驱动编写之中断处理
一.中断 1.概念 学过单片机的应该非常清楚中断的概念,也就是CPU在正常执行程序过程中,出现了突发事件(中断事件),于是CPU暂停当前程序的执行,转去处理突发事件.处理完毕后,CPU又返回被中断的程 ...
- Luogu2045 方格取数加强版(K取方格数) 费用流
题目传送门 题意:给出一个$N \times N$的方格,每个格子中有一个数字.你可以取$K$次数,每次取数从左上角的方格开始,每一次只能向右或向下走一格,走到右下角结束,沿路的方格中的数字将会被取出 ...
- 11.10 (下午)开课二个月零六天(ajax验证用户名,ajax调数据库)
用ajax验证用户名是否可用 testuid.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...