日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python3super用法_Python3中的super()函数详解

發(fā)布時(shí)間:2024/10/12 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3super用法_Python3中的super()函数详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于Python3中的super()函數(shù)

我們都知道,在Python3中子類在繼承父類的時(shí)候,當(dāng)子類中的方法與父類中的方法重名時(shí),子類中的方法會(huì)覆蓋父類中的方法,

那么,如果我們想實(shí)現(xiàn)同時(shí)調(diào)用父類和子類中的同名方法,就需要使用到super()這個(gè)函數(shù),用法為super().函數(shù)名()

下面是一個(gè)例子:

classA1():defgo(self):print("go A1 go")

classA2():defgo(self):print("go A2 go")

classA3():defgo(self):print("go A3 go")

classC(A3):pass

classB(A1,A2):pass

classD(B,C):defgo(self):print("NMSL")

super().go()d1=D()

d1.go()print(D.__mro__)

輸出結(jié)果為:

NMSL

go A1 go

(, , , , , , )

這里的__mro__屬性顯示了當(dāng)類調(diào)用方法時(shí),如果父類和子類中有同名方法情況下的查找順序。

如圖,當(dāng)我們實(shí)例化D類并調(diào)用類中的go方法時(shí),go方法中有一條語句調(diào)用了父類的go方法,__mro__屬性顯示了如何查找這個(gè)方法(當(dāng)然,自身類中的go方法不算),最后我們知道它調(diào)用的是A1類中的go方法,那么有些人會(huì)疑惑,為什么它不調(diào)用更近的的A3類或者A2類中g(shù)o方法呢,這就要涉及到super()函數(shù)實(shí)現(xiàn)順序查找的算法,這個(gè)算法即為C3算法。我的另一篇博客中記錄了這個(gè)算法的原理。

假如D類中本身就沒有g(shù)o方法,那么我們?cè)偈褂胹uper()函數(shù)進(jìn)行調(diào)用go方法,它會(huì)選擇哪一個(gè)父類的呢?

代碼如下:

classA1():defgo(self):print("go A1 go")classA2():defgo(self):print("go A2 go")classA3():defgo(self):print("go A3 go")classC(A3):pass

classB(A1,A2):pass

classD(B,C):defgogo(self):print("NMSL")

super().go()

d1=D()

d1.gogo()print(D.__mro__)

運(yùn)行后輸出結(jié)果:

NMSL

go A1 go

(, , , , , , )

可以看到結(jié)果還是這樣。

如果D類中不定義方法,僅僅在類的外部通過實(shí)例調(diào)用go方法,查找過程也是一樣的。

如圖:

class D(B,C):

pass

d1 =D()

d1.go()print(D.__mro__)

結(jié)果:

NMSL

go A1 go

(, , , , , , )

以上就是對(duì)于super()函數(shù)的個(gè)人看法。

總結(jié)

以上是生活随笔為你收集整理的python3super用法_Python3中的super()函数详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。