Python可以多继承吗

 我来答
育知同创教育
2018-07-06 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

Python支持多继承,与C++一样都会出现一种问题:子类继承的多个父类又继承了同一个父类,这时就有可能会出现父类构造方法被调用多次的情况。关于这个问题,我找了一些资料,虽然没有亲自全部验证,这里我总结一下自己对这个问题的看法。

Python和C++的关于这个问题的解决方案不太一样,当然Python还要看它的版本。

C++用的方案是引入了虚继承的语法避免同一个类被构造了多次。

Python用的方法是MRO(method resolution order,方法解析顺序) 。在在Python2.3之前,MRO的实现是基于DFS的,而在Python2.3以后MRO的实现是基于C3算法。找到的资料解释了一下更换算法的原因:

为什么采用C3算法

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

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

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

------------------------------新式类和旧式类中查找属性的顺序不同-------------------------------------

在新式类中,查找一个要调用的函数或者属性的时候,是广度优先搜搜的。

在旧式类当中,是深度优先搜索的。

slords
2017-11-03 · TA获得超过4932个赞
知道大有可为答主
回答量:3130
采纳率:56%
帮助的人:1878万
展开全部
可以,python的继承调用时依照广度优先的原则,如,A继承于B,C。那么如果B继承于D,D继承于F,C继承于E,只有E和F有方法m
那么当A的实例a调用方法m时,先去找B,B没有找C,C没有找D,D没有找E,E有方法m所以会调用E的m方法。
过会儿有空加张图
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sblsp
2017-10-31 · TA获得超过212个赞
知道小有建树答主
回答量:168
采纳率:61%
帮助的人:30.8万
展开全部
当然可以。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式