本人在學(xué)習(xí)Python的過程中發(fā)現(xiàn)了這么一個問題,自己查閱了一點資料但是還是沒有理解,如下:版本為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()其實一直不是特別理解,網(wǎng)上查了一下資料以后理解為super()會返回MRO列表里面的下一個類,那么我把Y的MRO打印出來:print('mro',Y.mro())#mro[,,]那么根據(jù)MRO列表,下面的類就是X了,那么super().f()實際就為X.f(),那么里面的returnself.x應(yīng)該就是X實例,可是實際運行結(jié)果顯示self是子類Y的實例.既然這里的super().f()調(diào)用了父類的方法,里面的self不應(yīng)該是指代父類實例么?這是我難以理解的地方.表述有點亂,望有前輩能給予解答,不勝感激!問題補充:寫這個問題的時候又想到了一點:繼承的時候常常會有super().__init__()來調(diào)用父類的__init__()函數(shù),調(diào)用這個函數(shù)的時候里面的self其實也就指代了子類實例?好像與之前的問題一個意思,但是不知道怎么理解,望能有前輩指點一下.
Python super() 調(diào)用父類方法, 但是父類中 self 并不是父類的實例而是子類的實例?
德瑪西亞99
2019-05-11 15:55:28