Python中多继承的原理是什么

Python中多继承的原理是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

MRO

MRO即method resolution order,用于判断子类调用的属性来自于哪个父类。在Python2.3之前,MRO是基于深度优先算法的,自2.3开始使用C3算法,定义类时需要继承object,这样的类称为新式类,否则为旧式类

从图中可以看出,旧式类查找属性时是深度优先搜索,新式类则是广度优先搜索

Python中多继承的原理是什么

C3算法最早被提出是用于Lisp的,应用在Python中是为了解决原来基于深度优先搜索算法不满足本地优先级,和单调性的问题。

本地优先级:指声明时父类的顺序,比如C(A,B),如果访问C类对象属性时,应该根据声明顺序,优先查找A类,然后再查找B类。

单调性:如果在C的解析顺序中,A排在B的前面,那么在C的所有子类里,也必须满足这个顺序

示例

看下面的例子

#-*-coding:utf-8-*-
#!python2
classX(object):
deff(self):
print'x'
classA(X):
deff(self):
print'a'
defextral(self):
print'extrala'
classB(X):
deff(self):
print'b'
defextral(self):
print'extralb'
classC(A,B,X):
deff(self):
super(C,self).f()
print'c'
printC.mro()
c=C()
c.f()
c.extral()

根据广度搜索原则最先搜索到A,所以结果很明显,如下所示

[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.X'>, <type 'object'>]acextral b

看完上述内容,你们掌握Python中多继承的原理是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!

发布于 2021-04-08 13:37:42
收藏
分享
海报
0 条评论
164
上一篇:如何在Python项目中引用计数 下一篇:怎么在Java中实现一个傅里叶变化算法
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码