class A(object):
def go(self):
print("go A go!")
def stop(self):
print("stop A stop!")
class B(A):
def go(self):
super().go()
print("go B go!")
class C(A):
def go(self):
super().go()
print("go C go!")
def stop(self):
super().stop()
print("stop C stop!")
class D(B, C):
def go(self):
super(D, self).go()
print("go D go!")
def stop(self):
super().stop()
print("stop D stop!")
class E(B, C):
pass
a = A()
b = B()
c = C()
d = D()
d.go()
d.stop()
个人理解,如出现错误请指教
类D多继承于类B、C,类B、C都继承于类A
执行到d.go()时,首先执行类D自己的go方法,代码执行到super().go(),
首先去调用D类的第一个父类B中的go方法,(相当于获取一个内存地址)同样遇到super().go(),
进而调用A类中的go方法,打印出 go A go! (B中的内存地址并未释放
然后执行D的第二个父类C,调用C中的go方法,C中重写A中的go方法,
但是先执行B中的go方法,但是此时调用C的父类A中的go方法时,
已经被B先一步的调用,因此执行C自己go方法中的打印语句,此时C调用完毕,释放地址,但是B的地址未释放,接着执行B中的打印语句
最后执行D中的打印语句
执行结果如下:
go A go!
go C go!
go B go!
go D go!
stop A stop!
stop C stop!
stop D stop!