Python中物件方法的定義很怪異,第一個參數一般都命名為self(相當於其它語言的this),用於傳遞物件本身,而在呼叫的時候則不必明確傳遞,系統會自動傳遞。
今天我們介紹的主角是super(), 在類別的繼承裡面super()非常常用, 它解決了子類別呼叫父類別方法的一些問題, 父類別多次被呼叫時只執行一次, 優化了執行邏輯,下面我們就來詳細看一下。
舉一個例子:
class Foo: def bar(self, message): print(message)
>>> Foo().bar("Hello, Python.") Hello, Python.
當存在繼承關係的時候,有時候需要在子類別中呼叫父類別的方法,此時最簡單的方法是把物件呼叫轉換成類調用,需要注意的是這時self參數需要明確傳遞,例如:
class FooParent: def bar(self, message): print(message) class FooChild(FooParent): def bar(self, message): FooParent.bar(self, message)
>>> FooChild().bar("Hello, Python.") Hello, Python.
這樣做有一些缺點,比如說如果修改了父類名稱,那麼在子類中會涉及多處修改,另外,Python是允許多繼承的語言,如上所示的方法在多繼承時就需要重複寫多次,顯得累贅。為了解決這些問題,Python引入了super()機制,例子程式碼如下:
class FooParent: def bar(self, message): print(message) class FooChild(FooParent): def bar(self, message): super(FooChild, self).bar(message)
>>> FooChild().bar("Hello, Python.") Hello, Python.
表面上看super(FooChild, self).bar(message)方法和FooParent.bar(self, message)方法的結果是一致的,實際上這兩種方法的內部處理機制大大不同,當涉及多繼承情況時,就會表現出明顯的差異來,直接給例子:
#代碼一:
class A: def init(self): print("Enter A") print("Leave A") class B(A): def init(self): print("Enter B") A.init(self) print("Leave B") class C(A): def init(self): print("Enter C") A.init(self) print("Leave C") class D(A): def init(self): print("Enter D") A.init(self) print("Leave D") class E(B, C, D): def init(self): print("Enter E") B.init(self) C.init(self) D.init(self) print("Leave E") E()
結果:
Enter E
Enter B
Enter A
Leave A
Leave B
Enter C
Enter A
Leave A
Leave C
Enter D
Enter A
Leave A
#Leave D
Leave E
執行順序很好理解,唯一需要注意的是公共父類別A被執行了多次。
程式碼二:
class A: def init(self): print("Enter A") print("Leave A") class B(A): def init(self): print("Enter B") super(B, self).init() print("Leave B") class C(A): def init(self): print("Enter C") super(C, self).init() print("Leave C") class D(A): def init(self): print("Enter D") super(D, self).init() print("Leave D") class E(B, C, D): def init(self): print("Enter E") super(E, self).init() print("Leave E") E()
結果:
Enter E
Enter B
Enter C
##Enter DEnter ALeave ALeave DLeave CLeave B##Leave E
##在super機制裡可以保證公共父類別僅執行一次,至於執行的順序,是依照MRO(Method Resolution Order):方法解析順序進行的。後續會詳細介紹一下這個MRO機制。以上是關於python的super()的作用和原理詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。