python 多重继承 深度优先还是广度优先
2018-01-31 19:51
477 查看
我们常说,
其实具体来说是
python官网
讲解1
以及
super详解
有这样一种需求:
一个类继承多个父类,同时这些类都有相同的方法名,但是具有不同的方法体,而且,子类需要调用所有父类的该方法
python2是深度优先,
python3是广度优先,
其实具体来说是
python2.2及其以前是深度优先
python2.3及其以后就是广度优先了
python官网
讲解1
以及
super子类调用父类的讲解
super详解
有这样一种需求:
一个类继承多个父类,同时这些类都有相同的方法名,但是具有不同的方法体,而且,子类需要调用所有父类的该方法
class Base: def vcr(self): pass class A(Base): def vcr(self): print("A") class B(Base): def vcr(self): print("B") class C(Base): def vcr(self): print("C") class D(Base): def vcr(self): print("D") class Z(A, B, C, D): def vcr(self): super(Z, self).vcr() # 根据类的多重继承,在A类中就有vcr方法,所以就会停止下来,不在会继续搜索 super(A, self).vcr() # 指定搜索的起始位置A,根据下面的列表得到会从A的下一个类开始运行,即B,调用完B的vcr方法之后,就会停下来 super(B, self).vcr() # 再次指定其实搜索位置B,从B后面的下一个类开始搜索,即 C,,调用完C的vcr方法之后,就会停下来 super(C, self).vcr() # 再次指定其实搜索位置C,从B后面的下一个类开始搜索,即 D,,调用完D的vcr方法之后,就会停下来 print("Z") z = Z() z.vcr() # A # B # C # D print(Z.mro()) # Z 的搜索路径 # [<class '__main__.Z'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <class '__main__.Base'>, <class 'object'>] # 可以这么理解: # super(Z,self).somemethod() # 第二个参数可以的到所有的父类的排列顺序 # 第一个参数是指定开始搜索的父类位置,从该父类的下一个类开始搜索
相关文章推荐
- Python学习笔记8-类的继承 、深度优先、广度优先
- Python学习笔记8-类的继承 、深度优先、广度优先
- 【Python】类的多重继承 、深度优先、广度优先
- python数据结构之图深度优先和广度优先
- ES聚合底层机制-bucket深的话采用广度优先更好,而如果是年度统计还是深度优先好
- python 图的遍历-深度优先和广度优先
- python数据结构之图深度优先和广度优先实例详解
- python 图 遍历-深度优先和广度优先 II
- python数据结构之图深度优先和广度优先
- python数据结构之图深度优先和广度优先实例详解
- python数据结构之图深度优先和广度优先
- python遍历文件夹——深度优先(DFS)/广度优先(BFS)
- python深度优先与广度优先的遍历算法区别
- Python学习笔记8-类的继承 、深度优先、广度优先
- 深度优先还是广度优先
- Python学习笔记8-类的继承 、深度优先、广度优先
- python深度优先与广度优先的遍历算法比较
- python数据结构与算法——图的广度优先和深度优先的算法
- 深度优先和广度优先的Python实现
- python数据结构之图深度优先和广度优先