|
发表于 2018-2-27 20:31:20
|
显示全部楼层
参见小甲鱼的帖子:http://bbs.fishc.com/thread-48759-1-2.html
我的理解:
执行:D.__mro__得到运行次序为
- >>> D.__mro__
- (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
复制代码
即先运行D,由于D是继承了B和C所以再运行B,并在执行super时先挂起,再运行D,再调用A。此时输出go A go!,返回执行go C go!,再返回至B,按说应该再调用A,但A已经在D中调用一次了,就不再调用了,输出go B go!,再返回D,输出go D go!。
稍微改一下程序,输出结果看的更清楚了。
- class A(object):
- def go(self):
- print ("go A go!")
- class B(A):
- def go(self):
- print('B')
- super().go()
- print ("go B go!")
- class C(A):
- def go(self):
- super().go()
- print( "go C go!")
- class D(B,C):
- def go(self):
- super().go()
- print ("go D go!")
- d = D()
- d.go()
复制代码- B
- go A go!
- go C go!
- go B go!
- go D go!
复制代码 |
|