Python3多继承查找算法:C3算法

1.举例说明:

class A:pass
class B:pass
class C:pass
class D(A, B):pass
class E(B,C):pass
class F(D, E):pass

1.计算D类的__mro__(其中O表示object):
头元素:
**********************列表中第一个元素
尾元素:
**********************除列表第一个元素其他元素都叫尾元素

mro(D) = [D] + merge(mro(A), mro(B), [A, B])
	   = [D] + merge([A, O], [B, O], [A, B])# A在第三个列表中的头元素中即把A加到主线上并在merge中删除
	   = [D, A] + merge([O], [B, O], [B]) #在判断O, O在第二列表中尾元素中,即跳过O,判断B,B在第三列表头元素中即把B加到主线里并在merge中删除B
	   = [D, A, B] + merge([O], [O])
	   = [D, A, B, O]		

1.计算F类的__mro__(其中O表示object):

mro(F) = [F] + merge(mro(D) + mro(E) + [D, E])
	   = [F] + merge([D, A, B, O], [E, B, C, O], [D, E]) # 先判断D, 在第三个列表的头元素中所以将D加到主线中,并将D从merge中移除
	   = [F, D] + merge([A, B, O], [E, B, C, O], [E]) # 在判断A,A既不在后面列表中的头元素也不在尾元素,即将A加到主线中,从merge中删除,并跳过C的判断(即跳过第一个列表的判断,从第二列表的第一个元素判读)
	   = [F, D, A] + merge([B, O], [E, B, C, O], [E])#判断E, 在后面一个列表中头元素中,将E加到主线中,并在merge中删除
	   = [F, D, A, E] + merge([B, O], [B, C, O])
	   = [F, D, A, E, B] = merge([O], [C, O])
	   = [F, D, A, E, B, C] + merge([O], [O])
	   = [F, D, A, E, B, C, O] 	   
	   (<class '__main__.F'>, <class '__main__.D'>, <class '__main__.A'>, <class '__main__.E'>, <class '__main__.B'>, <class '__main__.C'>, <class 'object'>)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值