本人在学习Python的过程中发现了这么一个问题,自己查阅了一点资料但是还是没有理解,如下:版本为python3.6代码如下:classX:def__init__(self):self.x=10deff(self):returnself.xclassY(X):def__init__(self):self.x=100defb(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其实也就指代了子类实例?好像与之前的问题一个意思,但是不知道怎么理解,望能有前辈指点一下.
添加回答
举报
0/150
提交
取消
