python mro算法_python的MRO算法

历史

python2.1 经典类 DFS(深度优先遍历)

python2.2 引入新式类,经典类 DFS,新式类 BFS(广度优先遍历)

python2.3-2.7 经典类 DFS,新式类 C3

python3 新式类 C3

U型继承和菱形继承

U型继承

对于DFS算法,MRO(方法解析顺序)为:CAXBY,最终拿到X的hello方法,没有问题

对于BFS算法,MRO为:CABXY,最终拿到B的hello方法,有问题

菱形继承

对于DFS算法,MRO(方法解析顺序)为:CAXB,最终拿到X的hello方法,有问题

对于BFS算法,MRO为:CABX,最终拿到B的hello方法,没有问题

C3线性化算法

DFS和BFS都不能同时解决U型继承和菱形继承两种模式,如果想要解决,那就需要在现有算法基础上加以改造

C3算法在DFS深度遍历基础上增加了一步:删除坏的节点

什么是好的节点?什么是坏的节点?

当搜索路径中N节点之后的节点都不继承N,则N节点为好的节点,否则为坏的节点

比如对于菱形继承,DFS之后得到搜索路径为CAXBX,由于X节点被后面的B节点继承,X节点为坏的节点,所以删除X节点,得到MRO顺序为CABX

区分搜索路径和MRO顺序:

上面的MRO顺序是在搜索路径的基础上删除了重复节点,比如菱形继承DFS得到的搜索路径为CAXBX,删除X得到MRO为:CAXB

总结

C3算法在DFS基础上(DFS满足U型继承)做了扩展,从而同时解决了U型继承和菱形继承两个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值