Python super() 调用父类方法, 但是父类中 self 并不是父类的实例而是子类的实例?

本人在学习Python的过程中发现了这么一个问题,自己查阅了一点资料但是还是没有理解,如下:
版本为python3.6
代码如下:
classX:
def__init__(self):
self.x=10
deff(self):
returnself.x
classY(X):
def__init__(self):
self.x=100
defb(self):
returnsuper().f()
x=X()
y=Y()
print(y.b())#->100,为什么不是10?
问题描述:本人对于super()其实一直不是特别理解,网上查了一下资料以后理解为super()会返回MRO列表里面的下一个类,那么我把Y的MRO打印出来:
print('mro',Y.mro())#mro[,,]
那么根据MRO列表,下面的类就是X了,那么super().f()实际就为X.f(),那么里面的returnself.x应该就是X实例,可是实际运行结果显示self是子类Y的实例.既然这里的super().f()调用了父类的方法,里面的self不应该是指代父类实例么?这是我难以理解的地方.
表述有点乱,望有前辈能给予解答,不胜感激!
问题补充:
写这个问题的时候又想到了一点:
继承的时候常常会有super().__init__()来调用父类的__init__()函数,调用这个函数的时候里面的self其实也就指代了子类实例?好像与之前的问题一个意思,但是不知道怎么理解,望能有前辈指点一下.
德玛西亚99
浏览 1234回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript