Python C3 算法 手动计算顺序

 

手动计算类继承C3算法原则:

  1. 以所求类的直接子类的数目分成相应部分
  2. 按照从左往右的顺序依次写出继承关系
  3. 继承关系第一个第一位,在所有后面关系都是第一个出现的,提取出来,其他都替换掉
  4. 如果步骤3中不成立,就到后面一部分去找
  5. 然后继续在后面这部分找,知道找不到,再回到第一部分去找
  6. 直到结束。

下面上例题,看下如何应用

.从左到右依次写出类继承关系,并分好部分
左边|右边
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 算法 手动计算顺序的更多相关文章

  1. C3算法 和 super

    一. Python的继承  多继承 子类继承父类. 继承是为了节省开发时间.提高开发效率 代码得到了重(chong)用 一个类可以拥有多个父类 lass shen_xian: # 定义一个神仙类 de ...

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

    在python历史版本中的演变史 python2.2之前: MRO原则: 只有经典类,遵循深度优先(从左到右)原则, 存在的问题:在有重叠的多继承中,违背重写可用原则 解决办法是再设计类的时候不要设计 ...

  3. python的垃圾回收机制 继承的顺序C3算法

    Python垃圾回收    -- 引用计数        -- Python为每个对象维护一个引用计数        -- 当引用计数为0的 代表这个对象为垃圾    -- 标记清除        - ...

  4. python 面向对象(六)MRO C3算法 super

    ########################总结################ 面向对象回顾 类:对某一个事物的描述,对一些属性和方法的归类 class 类名: var=123#类变量 def ...

  5. python学习 day20 (3月27日)----(单继承多继承c3算法)

    继承: 提高代码的重用性,减少了代码的冗余 这两个写法是一样的 Wa('青蛙').walk() #青蛙 can walk wa = Wa('青蛙') wa.walk() #青蛙 can walk 1. ...

  6. python多重继承C3算法

    python多重继承的MRO算法选择: 经典方式.Python2.2 新式算法.Python2.3 新式算法(C3).Python 3中只保留了最后一种,即C3算法 C3算法的解析: 1.多继承UML ...

  7. python中的MRO和C3算法

    一. 经典类和新式类 1.python多继承 在继承关系中,python子类自动用友父类中除了私有属性外的其他所有内容.python支持多继承.一个类可以拥有多个父类 2.python2和python ...

  8. Python多继承的C3算法

    C3算法 一.知识点补充: 拓扑排序:在图论中,拓扑排序(Topological Sorting) 是一个 有向无环图(DAG,Directed Acyclic Graph) 的所有顶点的线性序列.且 ...

  9. 关于Python类的多继承中的__mro__属性使用的C3算法以及继承顺序解释

    刚刚学到类的多继承这个环节,当子类继承多个父类时,调用的父类中的方法具体是哪一个我们无从得知,为此,在Python中有函数__mro__来表示方法解析顺序. 当前Python3.x的类多重继承算法用的 ...

随机推荐

  1. 【Unity】贝塞尔曲线关于点、长度、切线计算在 Unity中的C#实现

    原文:[Unity]贝塞尔曲线关于点.长度.切线计算在 Unity中的C#实现 写在前面 最近给项目做了个路径编辑,基本思路是满足几个基本需求: [额外说明]其实本篇和这个没关系,可以跳过" ...

  2. 零元学Expression Blend 4 – Chapter 20 以实作案例学习Childwindow

    原文:零元学Expression Blend 4 – Chapter 20 以实作案例学习Childwindow 本章将教大家如何运用Blend 4内建的假视窗原件-「ChildWindow」 Chi ...

  3. HTML 滚动条实现

    ##在对应的div中,添加overflow,固定高度为400px<div class="panel-body" style="height: 400px; over ...

  4. ASP.NET获取客户端、服务器端基础信息

    1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostN ...

  5. 程序的开机关机重启,开机启动,休眠功能delphi实现(使用AdjustTokenPrivileges提升权限)

    TShutDownStatus = (sdShutDown,sdReboot,sdLogOff,sdPowerOff); procedure ShutDown(sdStatus : TShutDown ...

  6. AStyle 2.02版本 AStyle(全称Artistic Style)是一个C、C++、C#和Java源代码缩进、格式化和美化工具

    http://download.csdn.net/detail/akof1314/3323725

  7. Delphi 7.0常用函数速查手册(磁盘文件类)

    在Delphi 7.0中,已为我们定义好了非常多的函数,大致分类有6种:数据类型转换函数.字符串.数组操作函数.文件.磁盘操作函数.内存.指针操作函数.数学运算函数.日期函数. 在Delphi中调用函 ...

  8. 关于CEdit控件的透明(重绘)

    摘自:http://www.jcwcn.com/html/VC/10_19_51_12.htm 做一个透明的Edit控件的主要问题是字符的输出,在Edit里输出的刷新有几个时机,一个是在接收到键盘或鼠 ...

  9. MJPhotoBrowser 用法

    一.使用方法:   #import "MJPhotoBrowser.h" #import "MJPhoto.h"   - (void)tapPhoto:(UIT ...

  10. hgoi#20190516

    T1-Buying A House 给你一个长度为n的序列a,给你目标房子m,最多花的钱k 如果a[i]为0,这座房子无法购买,否则可以购买,求能买的距离目标房子最近的房子,输出最小距离 两座房子之间 ...