在多重继承时寻找一个重载方法的顺序(MRO)来自于C3算法,

方法是进行迭代:

class B(A1,A2,A3 ...)

这时B的mro序列 mro(B) = [B] + merge(mro(A1), mro(A2), mro(A3) ..., [A1,A2,A3,...])

当调用super(B,self).fun()时会按照上述顺序调用各个父类的方法,一直到当某个类没有调用super方法为止

C3具体算法实现如下:

from exceptions import Exception

def c3_lineration(kls):

if len(kls.__bases__) == 1:

return [kls, kls.__base__]

else:

l = [c3_lineration(base) for base in kls.__bases__]

l.append([base for base in kls.__bases__])

return [kls] + merge(l)

def merge(args):

if args:

for mro_list in args:

for class_type in mro_list:

for comp_list in args:

if class_type in comp_list[1:]:

break

else:

next_merge_list = []

for arg in args:

if class_type in arg:

arg.remove(class_type)

if arg:

next_merge_list.append(arg)

else:

next_merge_list.append(arg)

return [class_type] + merge(next_merge_list)

else:

raise Exception

else:

return []

class A(object):pass

class B(object):pass

class C(object):pass

class E(A,B):pass

class F(B,C):pass

class G(E,F):pass

print c3_lineration(G)

转载于:https://blog.51cto.com/8415580/1349934

python多重继承相关推荐

  1. [转载] python多重继承初始化_关于python多重继承初始化问题

    参考链接: Python多重继承 class A(object): def __init__(self, a): print '__init__ A', str(a) self.A = a class ...

  2. [转载] 当心掉进Python多重继承里的坑

    参考链接: Python多重继承 关于类的知识点里面,有一块是关于多重继承,跟其他主流语言一样,Python也支持多重继承,多重继承虽然有一些好处,但是坑很多,我们今天就来聊一聊Python多重继承里 ...

  3. python多重继承_Python多重继承

    python多重继承 We are going to learn about python multiple inheritance today. Before starting multiple i ...

  4. pythonsuper多重继承_python多重继承实例 python多重继承下super问题

    python的多重继承问题有些事,有些人,有些风景,一旦入眼入心,即便刹那,也是永恒.当生活心怀歹毒地将一切都搞成了黑色幽默,小编顺水推舟把自己变成了一个受过高等教育的流氓. 楼上的回答的很正确,简单 ...

  5. python多重继承super父类参数_多重继承如何处理super()和不同的参数?

    我正在深入研究一些更高级的python主题(至少对我来说是高级的).我正在阅读有关多重继承和如何使用super()的内容.我或多或少理解超级函数的使用方式,但这样做有什么不对?以下内容:class F ...

  6. Python多重继承(一分钟读懂)

    class A(object):def test(self):print('AAA')class B(object):def test(self):print('B中的test')def test2( ...

  7. python多重继承初始化顺序_Python 多重继承顺序

    本文借鉴自 http://www.cnblogs.com/panyinghua/p/3283726.html 当类有多个超类,而且超类中有相同的方法时,继承顺序就很重要,如下: class A (de ...

  8. python多重继承 同名函数_python 继承与多重继承

    当然,如果不支持python继承,语言特性就不值得称为"类".派生类定义的语法如下所示: . . . 名称 BaseClassName 必须定义于包含派生类定义的作用域中. 也允许 ...

  9. Python多重继承时属性的调用顺序

    使用多重继承时,属性的解析会变得非常复杂,因为可以使用很多搜索路径来绑定属性.在查找使用了多重继承的属性时,会将所有基类按从"最特殊"的类型到"最不特殊"的类这 ...

最新文章

  1. 图很难理解?看这篇图论基础与图存储结构就够了
  2. 轻松掌握mysql数据库锁机制的相关原理_轻松掌握MySQL数据库锁机制的相关原理...
  3. MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构
  4. js实现HTML标题栏中新消息提示效果
  5. ug建模文本怎么竖着_UG建模知乎答疑练习小集锦
  6. 【前端工程师手册】JavaScript作用域拾遗
  7. s2sh框架搭建(基于spring aop)
  8. BLOB:大数据,大对象,在数据库中用来存储超长文本的数据,例如图片等
  9. Dojo学习2 dojo快速安装
  10. PHP添加扩展 [Windows XAMPP]
  11. erp系统方案书_南方电网与电缆企业ERP系统互联互通解决方案
  12. Raki的读paper小记:Sources of Transfer in Multilingual Named Entity Recognition
  13. C语言基础:如何判断素数(质数)与合数
  14. [计算机毕业设计]深度学习的图标型验证码识别系统
  15. iOS tableview的第二页数据刷新特定某个cell数据的解决办法
  16. Microsoft Project 2010 设置子任务
  17. 腾讯云服务器安装java服务部署环境
  18. CF1375G Tree Modification
  19. 【Python相关】PyCharm如何修改行注释颜色
  20. 同学用javascript写好了论坛自动灌水机。

热门文章

  1. js实现下拉框三级级联
  2. 学习新技术的10个建议
  3. zabbix web前端取值同后端取值不一致
  4. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
  5. iOS如何使用三方字体
  6. dede采集 标题不完整
  7. 30条HTML代码编写指南 for入门者
  8. 2017 湘潭邀请赛JSCPC GJ
  9. Linux network source code
  10. 删除ctrl alt del更改密码