C3算法

MRO(Method Resolution Order):方法解析顺序

1. 如果是经典类MRO为DFS(深度优先搜索(子节点顺序:从左到右))。
2. 如果是新式类MRO为BFS(广度优先搜索(子节点顺序:从左到右))。

不少语言支持多继承,比如python多继承,似乎很简单,但仔细想想,真的是这样吗?创建一个类时,如果继承的层级比较深,继承图中的每个节点都可能有一个或多个直接父类,那么这个新创建的类该从按照什么顺序继承父类和祖先类的属性和方法?这个问题远没有想象的简单,要逐层分析

O=object
class f(O):pass
class e(O):pass
class d(O):pass
class c(d,f):pass
class b(e,d):pass
class a(b,c):pass
print(a.mro())
#l[f]=fo l[e]=eo l[d]=do
#l[c]=c+mer(do,fo,df)
#l[c]=cdfo
#l[b]=b+mer(eo,do,ed)
#l[b]=bedo
#l[a]=a+mer(do,dfo,)
#l[a]=abecdfo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值