python的继承体系mro详解

本文为阅读python官方文档之mro详解,所得的一些笔记。

文档地址:https://www.python.org/download/releases/2.3/mro/


python在2.2之后引入了新式类,即继承自object的类。在2.3引入了全新的mro来对继承的顺序等进行管理。

在此之前,python按照从左到右的继承顺序,进行深度优先遍历,得出继承树的顺序。


引入mro后,按照C3算法, 进行线性化。


C3算法:

首先介绍一些记号,C1C2...CN表示一系列类[C1,C2,...CN  ]

head = C1  tail = C2...CN,同时,C1+C2...CN = C1C2...CN

假设C继承自B1B2...BN,那么C的mro线性数组为L[C],规则为:C的线性mro数组为C加上C的父类的mro数组和父类的集合的归并。

符号表示为:L[C(B1B2...BN)] = C + merge(L[B1],L[B2],....L[BN],B1B2...BN)

如果C是object类,没有父类,则L[C] = C

归并的算法表示如下:取第一个列表的head,如L[B1][0],如果head没有在之后任一的列表中的tail中出现,那么把它加在C的mro数组中,然后将它从所有的列表中移除。

重复该操作,直到找不到满足条件的head。

例子1:

class A(object):pass

clas

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值