请教!Python3以下代码运行出来显示的类的多继承时,子类调用父类的方法顺序为什么是深度优先而不是广度优先?

嚯嚯嚯i 2019-02-10 09:36:47

class A1():
pass

class A2():
def who_am_i(self):
print("I am a A2")

class A3():
def who_am_i(self):
print("I am a A3")

class B(A1,A2):
pass

class C(A3):
def who_am_i(self):
print("I am a C")

class D(C,B):
pass

d1 = D()
d1.who_am_i()
print(D.__mro__)

...全文
382 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
嚯嚯嚯i 2019-02-17
  • 打赏
  • 举报
回复
引用 2 楼 混沌鳄鱼 的回复:
python新式类的MRO是按照 《拓扑排序算法》 规则,用的是C3算法。 你可以自己百度一下 拓扑排序算法, 其实就逐步消除入度为0(只有指向别的节点而没有被指向的)的节点的过程。 用的是先左后右,先根后叶的两个原则。广度优先并不是简单的同级节点先左后右,而是指入度为0点。 很明显先消D,输出D, 这时C和B都是入度为0节点,消C(取左)之后输出D-C, 这时入度为0的节点有A3和B,消A3(取左)之后输出D-C-A3 这时入度为0的节点只有B了,消B之后之后输出D-C-A3-B 这时入度为0的节点有A1和A2,消A1(取左)之后输出D-C-A3-B-A1 这时入度为0的节点只剩A2,消A2之后输出D-C-A3-B-A1-A2 最后输出MRO为 D-C-A3-B-A1-A2-Object
多谢!现在已经懂了,之前是没有理解C3算法。
混沌鳄鱼 2019-02-11
  • 打赏
  • 举报
回复
python新式类的MRO是按照 《拓扑排序算法》 规则,用的是C3算法。 你可以自己百度一下 拓扑排序算法, 其实就逐步消除入度为0(只有指向别的节点而没有被指向的)的节点的过程。 用的是先左后右,先根后叶的两个原则。广度优先并不是简单的同级节点先左后右,而是指入度为0点。 很明显先消D,输出D, 这时C和B都是入度为0节点,消C(取左)之后输出D-C, 这时入度为0的节点有A3和B,消A3(取左)之后输出D-C-A3 这时入度为0的节点只有B了,消B之后之后输出D-C-A3-B 这时入度为0的节点有A1和A2,消A1(取左)之后输出D-C-A3-B-A1 这时入度为0的节点只剩A2,消A2之后输出D-C-A3-B-A1-A2 最后输出MRO为 D-C-A3-B-A1-A2-Object
嚯嚯嚯i 2019-02-10
  • 打赏
  • 举报
回复
纠结很久了,求大佬解答 感谢!
【课程介绍】      Pytorch项目实战 垃圾分课程从实战的角度出发,基于真实数据集与实际业务需求,结合当下最新话题-垃圾分问题为实际业务出发点,介绍最前沿的深度学习解决方案。    从0到1讲解如何场景业务分析、进行数据处理,模型训练与调优,最后进行测试与结果展示分析。全程实战操作,以最接地气的方式详解每一步流程与解决方案。    课程结合当下深度学习热门领域,尤其是基于facebook 开源分神器ResNext101网络架构,对网络架构进行调整,以计算机视觉为核心讲解各大网络的应用于实战方法,适合快速入门与进阶提升。【课程要求】 (1)开发环境:python版本:Python3.7+; torch版本:1.2.0+; torchvision版本:0.4.0+ (2)开发工具:Pycharm;(3)学员基础:需要一定的Python基础,及深度学习基础;(4)学员收货:掌握最新科技图像分关键技术;(5)学员资料:内含完整程序源码和数据集;(6)课程亮点:专题技术,完整案例,全程实战操作,徒手撸代码【课程特色】 阵容强大讲师一直从事与一线项目开发,高级算法专家,一直从事于图像、NLP、个性化推荐系统热门技术领域。仅跟前沿基于当前热门讨论话题:垃圾分,课程采用学术届和工业届最新前沿技术知识要点。实战为先根据实际深度学习工业场景-垃圾分,从产品需求、产品设计和方案设计、产品技术功能实现、模型上线部署。精心设计工业实战项目保障效果项目实战方向包含了学术届和工业届最前沿技术要点项目包装简历优化课程内垃圾分图像实战项目完成后可以直接优化到简历中【课程思维导图】 【课程实战案例】

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧