Python探路-多重继承 - Go语言中文社区

Python探路-多重继承


多重继承都会让python初学者很疑惑,哪怕当时看完,过一段时间也就遗忘了,因此写下了本文,希望借此能够让python初学者能够比较深刻的记住。

多重继承查找父类的方法有两种:

1、深度优先---针对经典类,即python2.2之前和python2.7

2、C3算法---针对新式类

一、深度优先:

可从某个定点v出发,访问此顶点,然后一次从v的违背访问的邻接点触发深度优先遍历图,直至途中所有和v有路径相同的顶点都被访问到;若此时途中尚有顶点未被访问,则另选途中一个未曾被访问的顶点做开始点。

例:

结果:v1, v2, v4, v5, v3, v7, v6

2、C3算法:

其实举个例子更能说明问题:

结果大概是这样:

mro(A)=[A] + merge(mro(B),mro(C),[B,C])

mro(B) = [B] + mro(D)

mro(D)=[D,O]

所以:mro(A)= [A] + merge(mro(B),mro(C),[B,C])

                          =  [A] + merge([B,mro(D)],[C,O],[B,C])

由于B不在任何列表的列尾,所以上式等于:

                         = [A,B]+merge([mro(D)],[C,O],[C])

                         = [A,B]+merge([D,O],[C,O],[C])

                         = [A,B,D]+merge([O],[C,O],[C])

由于O为[C,O]的列尾,所以寻找下一个C,所以最终结果为:

                         = [A,B,D,C,O]

注:对于一个列表[A,B,C],A为列头,[B,C]为列尾

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zphdgqs/article/details/90769767
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 21:27:11
  • 阅读 ( 793 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢