python __mro__ c3算法
来源:互联网 发布:安卓smali转java 编辑:程序博客网 时间:2024/06/10 03:56
def mro_c3(*bases): if len(bases) == 1: if not bases[0].__bases__: return bases else: return bases + mro_c3(*bases[0].__bases__) else: seqs = [list(mro_c3(C)) for C in bases] + [list(bases)] res = [] while True: non_empty = list(filter(None, seqs)) if not non_empty: return tuple(res) for seq in non_empty: candidate = seq[0] not_head = [ s for s in non_empty if candidate in s[1:]] if not_head: candidate = None else: break if not candidate: raise TypeError('adfadsf') res.append(candidate) for seq in non_empty: if seq[0] == candidate: del seq[0]
比如:
class A(object): passclass B(dict ): passclass CC(A, B): pass
求CC.__mro__步骤是:(下面mro既mro_c3)
(CC) + mro((A,B))
(CC)+[mro(A), mro(B)] + [[A, B]]
(CC) + [ (A, object), (B, dict, object), [A,B]] ==> res =[]
(CC) + [ ( object), (B, dict, object), [B]] ==> res =[A]
(CC) + [ (object), (B, dict, object), [B]] ==> res =[A] #object 没有被加进res
(CC) + [ (object), ( dict, object), []] ==> res =[A,B]
(CC) + [ (object), ( dict, object)] ==> res =[A,B] #object 没有被加进res
(CC) + [ (object), ( object)] ==> res =[A,B, dict]
(CC) + [ ] ==> res =[A,B, dict, object]
(CC) + res => (CC, A, B, dict, object)
- python __mro__ c3算法
- python多重继承C3算法
- python多重继承新算法C3
- python中mro中的C3算法
- Python 类继承,__bases__, __mro__, super
- Python 类继承,__bases__, __mro__, super
- Python 类继承,__bases__, __mro__, super
- python新式类多重继承 广度优先搜索 C3算法
- Python的类的继承的C3算法的序列
- 读书笔记 《算法导论》 C3
- c3
- c3
- C3
- <PY><core python programming笔记>C3 Python基础
- python 实现周志华 机器学习书中的决策树 c3.0
- C3-循环
- c3选择器
- C3选择器
- 项目周
- 配置Apache服务器支持向目录PUT文件
- Linux CURL的安装和使用
- oracle 之 权 限 问 题
- U-Boot Stage2
- python __mro__ c3算法
- 嵌入式应用中存储器类型的选择技巧
- 对数据库连接的一点感悟
- Unix网络编程基础学习笔记一(地址结构相关)
- sqlmap注入语句整理
- 使用Python模拟登录QQ邮箱获取QQ好友列表
- Activity的跳转与传值
- python如何连接mysql数据库
- uva 10404 Bachet's Game