python多重继承
在多重继承时寻找一个重载方法的顺序(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多重继承相关推荐
- [转载] python多重继承初始化_关于python多重继承初始化问题
参考链接: Python多重继承 class A(object): def __init__(self, a): print '__init__ A', str(a) self.A = a class ...
- [转载] 当心掉进Python多重继承里的坑
参考链接: Python多重继承 关于类的知识点里面,有一块是关于多重继承,跟其他主流语言一样,Python也支持多重继承,多重继承虽然有一些好处,但是坑很多,我们今天就来聊一聊Python多重继承里 ...
- python多重继承_Python多重继承
python多重继承 We are going to learn about python multiple inheritance today. Before starting multiple i ...
- pythonsuper多重继承_python多重继承实例 python多重继承下super问题
python的多重继承问题有些事,有些人,有些风景,一旦入眼入心,即便刹那,也是永恒.当生活心怀歹毒地将一切都搞成了黑色幽默,小编顺水推舟把自己变成了一个受过高等教育的流氓. 楼上的回答的很正确,简单 ...
- python多重继承super父类参数_多重继承如何处理super()和不同的参数?
我正在深入研究一些更高级的python主题(至少对我来说是高级的).我正在阅读有关多重继承和如何使用super()的内容.我或多或少理解超级函数的使用方式,但这样做有什么不对?以下内容:class F ...
- Python多重继承(一分钟读懂)
class A(object):def test(self):print('AAA')class B(object):def test(self):print('B中的test')def test2( ...
- python多重继承初始化顺序_Python 多重继承顺序
本文借鉴自 http://www.cnblogs.com/panyinghua/p/3283726.html 当类有多个超类,而且超类中有相同的方法时,继承顺序就很重要,如下: class A (de ...
- python多重继承 同名函数_python 继承与多重继承
当然,如果不支持python继承,语言特性就不值得称为"类".派生类定义的语法如下所示: . . . 名称 BaseClassName 必须定义于包含派生类定义的作用域中. 也允许 ...
- Python多重继承时属性的调用顺序
使用多重继承时,属性的解析会变得非常复杂,因为可以使用很多搜索路径来绑定属性.在查找使用了多重继承的属性时,会将所有基类按从"最特殊"的类型到"最不特殊"的类这 ...
最新文章
- 图很难理解?看这篇图论基础与图存储结构就够了
- 轻松掌握mysql数据库锁机制的相关原理_轻松掌握MySQL数据库锁机制的相关原理...
- MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构
- js实现HTML标题栏中新消息提示效果
- ug建模文本怎么竖着_UG建模知乎答疑练习小集锦
- 【前端工程师手册】JavaScript作用域拾遗
- s2sh框架搭建(基于spring aop)
- BLOB:大数据,大对象,在数据库中用来存储超长文本的数据,例如图片等
- Dojo学习2 dojo快速安装
- PHP添加扩展 [Windows XAMPP]
- erp系统方案书_南方电网与电缆企业ERP系统互联互通解决方案
- Raki的读paper小记:Sources of Transfer in Multilingual Named Entity Recognition
- C语言基础:如何判断素数(质数)与合数
- [计算机毕业设计]深度学习的图标型验证码识别系统
- iOS tableview的第二页数据刷新特定某个cell数据的解决办法
- Microsoft Project 2010 设置子任务
- 腾讯云服务器安装java服务部署环境
- CF1375G Tree Modification
- 【Python相关】PyCharm如何修改行注释颜色
- 同学用javascript写好了论坛自动灌水机。