Python不支援多態,也不用支援多態,python是一種多態語言,崇尚鴨子類型。一個物件有效的語義,不是由繼承自特定的類別或實作特定的接口,而是由當前方法和屬性的集合決定。
多態
是允許將父物件設定為和一個或多個它的子物件相等的技術,例如Parent:=Child; 多態性使得能夠利用同一類別(基類)類型的指標來引用不同類別的物件,以及根據所引用物件的不同,以不同的方式執行相同的操作。
相關推薦:《python影片教學》
class A: def prt(self): print("A") class B(A): def prt(self): print("B") class C(A): def prt(self): print("C") class D(A): pass class E: def prt(self): print("E") class F: pass def test(arg): arg.prt() a = A() b = B() c = C() d = D() e = E() f = F() test(a) test(b) test(c) test(d) test(e) test(f) 输出结果 A B C A E Traceback (most recent call last): File "D:/Python/多态1.py", line 45, in <module> test(f) File "D:/Python/多态1.py", line 30, in test arg.prt() AttributeError: 'F' object has no attribute 'prt' Process finished with exit code 1
乍一看似乎python支援多態,呼叫test(a),test(b),test(c ),test(d)時工作的很好,但是下邊就大不一樣了。
呼叫test(e)時,python只是呼叫e的prt方法,並沒有判斷e是否為A子類別的物件(事實上,定義test方法時也沒有指定參數的類型,python根本無法判斷)。
呼叫test(f)時報錯,原因很簡單,f沒有prt方法。
首先Python不支援多態,也不用支援多態,python是一種多態性語言,崇尚鴨子類型。以下是維基百科中對鴨子類型得論述:
在程式設計中,鴨子類型(英文:duck typing)是動態類型的一種風格。在這種風格中,一個物件有效的語義,不是由繼承自特定的類別或實作特定的接口,而是由當前方法和屬性的集合決定。這個概念的名字來自James Whitcomb Riley提出的鴨子測試,「鴨子測試」可以這樣表述:
「當看到一隻鳥走過來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這隻鳥就可以被稱為鴨子。」
在鴨子類型中,關注的不是物件的類型本身,而是它是如何使用的。例如,
在不使用鴨子類型的語言中,我們可以寫一個函數,它接受一個類型為鴨的對象,並呼叫它的走和叫方法。
在使用鴨子類型的語言中,這樣的一個函數可以接受一個任意類型的對象,並呼叫它的走和叫方法。如果這些需要被呼叫的方法不存在,那麼將會引發一個運行時錯誤。任何擁有這樣的正確的走和叫方法的對像都可被函數接受的這種行為引出了以上表述,這種決定類型的方式因此得名。
鴨子類型通常得益於不測試方法和函數中參數的類型,而是依賴文件、清晰的程式碼和測試來確保正確使用。從靜態類型語言轉向動態類型語言的使用者通常試圖添加一些靜態的(在運行之前的)類型檢查,從而影響了鴨子類型的益處和可伸縮性,並約束了語言的動態特性。
毫無疑問在python中對像也是一塊內存,內存中除了包含屬性、方法之外,還包含了對象得類型,我們通過引用來訪問對象,比如a=A(),首先python建立一個物件A,然後宣告一個變數a,再將變數a與物件A連結起來。變數a是沒有類型得,它的型別取決於其關聯的物件。 a=A()時,a是A類型的引用,我們可以說a是A型的,如果再將a賦值3,a=3,此時a就是一個整數的引用,但python並不是弱類型語言,在python中'2' 3會報錯,而在PHP中'2' 3會得到5。可以這麼理解,在python中變數類似與c中的指針,和c不同的是python中的變數可以指向任何類型,雖然這麼說不太準確,但是理解起來容易點。
因此,在python運行過程中,參數被傳遞過來之前並不知道參數的類型,雖然python中的方法也是後期綁定,但是和Java中多態的後期綁定卻是不同的,java中的後製綁定至少知道物件的類型,而python中就不知道參數的類型。
test方法只規定,接收一個參數,呼叫這個參數的prt方法。在運行的時候如果這個參數有prt方法,python就執行,如果沒有,python就報錯,因為abcde都有prt方法,而f沒有,所以得到了上邊得結果,這就是python的運行方式。
以上是python中多態如何理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

Python和C 在内存管理和控制方面的差异显著。1.Python使用自动内存管理,基于引用计数和垃圾回收,简化了程序员的工作。2.C 则要求手动管理内存,提供更多控制权但增加了复杂性和出错风险。选择哪种语言应基于项目需求和团队技术栈。

Python在科學計算中的應用包括數據分析、機器學習、數值模擬和可視化。 1.Numpy提供高效的多維數組和數學函數。 2.SciPy擴展Numpy功能,提供優化和線性代數工具。 3.Pandas用於數據處理和分析。 4.Matplotlib用於生成各種圖表和可視化結果。

選擇Python還是C 取決於項目需求:1)Python適合快速開發、數據科學和腳本編寫,因其簡潔語法和豐富庫;2)C 適用於需要高性能和底層控制的場景,如係統編程和遊戲開發,因其編譯型和手動內存管理。

Python在數據科學和機器學習中的應用廣泛,主要依賴於其簡潔性和強大的庫生態系統。 1)Pandas用於數據處理和分析,2)Numpy提供高效的數值計算,3)Scikit-learn用於機器學習模型構建和優化,這些庫讓Python成為數據科學和機器學習的理想工具。

每天學習Python兩個小時是否足夠?這取決於你的目標和學習方法。 1)制定清晰的學習計劃,2)選擇合適的學習資源和方法,3)動手實踐和復習鞏固,可以在這段時間內逐步掌握Python的基本知識和高級功能。

Python在Web開發中的關鍵應用包括使用Django和Flask框架、API開發、數據分析與可視化、機器學習與AI、以及性能優化。 1.Django和Flask框架:Django適合快速開發複雜應用,Flask適用於小型或高度自定義項目。 2.API開發:使用Flask或DjangoRESTFramework構建RESTfulAPI。 3.數據分析與可視化:利用Python處理數據並通過Web界面展示。 4.機器學習與AI:Python用於構建智能Web應用。 5.性能優化:通過異步編程、緩存和代碼優

Python在開發效率上優於C ,但C 在執行性能上更高。 1.Python的簡潔語法和豐富庫提高開發效率。 2.C 的編譯型特性和硬件控制提升執行性能。選擇時需根據項目需求權衡開發速度與執行效率。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

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

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

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