|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我在学习小甲鱼老师的在类和对象中讲解MRO顺序的课程对MRO顺序产生了困惑,练习题如下:
>>> class A:
... def ping(self):
... print("A ping~")
...
>>> class B(A):
... def pong(self):
... print("B pong~")
...
>>> class C(A):
... def pong(self):
... print("C pong~")
...
>>> class D(B, C):
... def pingpong(self):
... self.ping()
... self.pong()
...
>>> d = D()
>>> d.pingpong()
>>> # 请问这里会打印什么内容?
答案是:
>>> d.pingpong()
A ping~
B pong~
我的困惑是按照MRO继承顺序,如果相关函数在B类和C类中均出现,那么是否会在B类中先执行,然后再到C类中去执行?还是只在B类中去执行,而不会去C类中再执行?
这道题我的理解是对于ping()方法,由于D类本身中没有,按照MRO继承顺序应该先去B类中找,然而B类中也没有,再去其父类A中去找,此时A类中有ping()方法,故执行相关语句(即打印"A ping~").我的困惑是之后会不会再去类C中找ping方法?我的理解流程如下:
首先是去查找ping()函数
ping()方法查找流程: 实例对象d  类D  类B  类A 类C
其次再去找pong()函数
pong()方法查找流程: 实例对象d  类D  类B  类A 类C
麻烦大佬帮忙指点一下我的理解是否有误,谢谢!
|
|