|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 白白白白丶白 于 2020-7-14 16:58 编辑
- class A():
- def go(self):
- print ("go A go!")
- def stop(self):
- print ("stop A stop!")
- def pause(self):
- raise Exception("Not Implemented")
- class B(A):
- def go(self):
- super(B, self).go()
- print ("go B go!")
- class C(A):
- def go(self):
- super(C, self).go()
- print ("go C go!")
- def stop(self):
- super(C, self).stop()
- print ("stop C stop!")
- class D(B,C):
- def go(self):
- super(D, self).go()
- print ("go D go!")
- def stop(self):
- super(D, self).stop()
- print ("stop D stop!")
- def pause(self):
- print ("wait D wait!")
- class E(B,C):
- pass
复制代码
- >>> d = D()
- >>> d.go()
- go A go!
- go C go!
- go B go!
- go D go!
复制代码
这里中间顺序为什么要先执行C(A)的方法,再执行B(A)的方法,记得小甲鱼有个 视频讲过,请问在第几期哦
本帖最后由 Twilight6 于 2020-7-14 17:11 编辑
顺序你可以看下下面的扩展阅读,这里涉及了 方法解析顺序(Method Resolution Order,MRO)和 C3 算法:
MRO 的顺序基本就是:在避免同一类被调用多次的前提下,使用广度优先和从左到右的原则去寻找需要的属性和方法。
在继承体系中,C3 算法确保同一个类只会被搜寻一次。例子中,如果一个属性或方法在 D 类中没有被找到,Python 就会搜寻 B 类,然后搜索 C类,如果都没有找到,会继续搜索 B 的基类 A,如果还是没有找到,则抛出“AttributeError”异常。
-------扩展阅读
视频:
零基础入门学习Python 继承
扩展阅读:
多重继承的陷阱:钻石继承(菱形继承)问题
|
|