马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 继承
扩展阅读:
多重继承的陷阱:钻石继承(菱形继承)问题
|