您好,登錄后才能下訂單哦!
這篇“python中關于super()函數的問題怎么解決”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“python中關于super()函數的問題怎么解決”文章吧。
class Person: def run(self): print('studying') class Person1: def run(self): print('working') class Person2: def run(self): print('playing') class Person3(Person,Person1,Person2): def run(self): super().run1() p=Person3() p.run()
執行結果:
AttributeError: ‘super’ object has no attribute ‘run1’
注意:
1、一個類繼承多個類時,如果父類中沒有提供該方法,類會通過__mro__屬性一直向上搜索,如果直到object還沒有搜索到該方法,那么將會引發AttributeError異常
class Person: def run(self): print('studying') class Person1: def run(self): print('working') class Person2: def run(self): print('playing') class Person3(Person,Person1,Person2): def run(self): super(Person1,self).run() p=Person3() p.run()
輸出結果為:playing;而不是working
注意:
1、super()函數的使用。
使用super()函數時,可以通過super(類名,self)來指定對哪個對象以哪個類為起點向上搜索父類中的方法。
例如:super(Person1,self).run():表示以Person1類為起點,向上搜索self(Person3的對象)的run方法。
Person1向上搜索到了<class ‘main.Person2’>,所以才會輸出playing
2、print(Person3.mro)的繼承順序為:(<class ‘main.Person3’>, <class ‘main.Person’>, <class ‘main.Person1’>, <class ‘main.Person2’>, <class ‘object’>)
class A: def who(self): print('A', end='') class B(A): def who(self): super(B, self).who() print('B', end='') class C(A): def who(self): super(C, self).who() print('C', end='') class D(B, C): def who(self): super(D, self).who() print('D', end='') item = D() item.who() print(D.__mro__)
輸出結果:
ACBD
(<class ‘main.D’>, <class ‘main.B’>, <class ‘main.C’>, <class ‘main.A’>, <class ‘object’>)
以上就是關于“python中關于super()函數的問題怎么解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。