Python多重继承说明及应用

Python中没有接口的概念,替代之的是多重继承。而引入多重继承之后,一个新的问题是多个父类之间的继承顺序和方法调用顺序。比如:子类中调用的方法在多个父类中都存在的时候,到底会调用哪个父类的方法?(显然不会把所有父类的方法都调用一遍)

 

理解MRO

如果把单重继承理解为是链表结构,那么多重继承则可以认为是树状结构。所以多重继承的向上搜索的规则有2种实现方式:

  1. 深度优先搜索(DFS)
  2. 广度优先搜索(BFS)

深度优先搜索图解如下:

这种查找方式的缺点:

棱形继承时可能会出现父类访问优先于子类访问。如上图中的父类D就优于子类C先被访问到。这会导致子类C中的覆盖方法无法被访问到。

 

广度优先搜索图解如下:

这种查找方式的缺点:

在正常继承时没有按照继承的单调性来查找。

 

为了解决DFS和BFS的缺陷问题,Python中使用了C3算法,经过调整之后多重继承的查找方式如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上帝De助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值