Python中的多態是什麼? 用例子解釋多態性
已發表: 2021-03-05目錄
介紹
Python 是一種高級、解釋性和開源的編程語言。 它在許多程序員和開發人員中獲得了很多關注,因為它支持有助於許多任務的庫,例如探索性數據分析、GUI 編程等。此外,python 編程非常有趣。
我們將在本文中討論 python 的一個有趣的特性。 所以讓我們開始吧!
什麼是多態性?
多態性這個詞來源於希臘詞 poly(意思是許多)和態射(形式)。 這意味著單個函數名或方法名可以有多種形式。 這滿足了在實現中避免代碼重複的願望。
但是python中的多態性與其他編程語言中的多態性有點不同。 像 java 和 c++ 這樣的編程語言支持編譯時多態(方法重載)。 在方法重載中,多個方法可以具有相同的方法名稱,但參數簽名不同。 python不支持此功能。 如果多個方法具有相同的功能,則最新的功能實現將覆蓋較早的功能實現。
函數多態
python中的函數多態可以分為用戶自定義多態和預定義多態兩種。
我們可以實現用戶定義的多態性來調用具有不同參數簽名的同一個函數,這可以認為是對python中方法重載不可用的一點補償。 讓我們來看一個示例代碼
def mul (a,b,c= 1 ): 返回a*b*c; 打印( mul ( 1,2,3 ) ) 打印(mul ( 1,2 ) ) |
在上面的代碼中,即使傳遞的參數數量不相等,兩個打印語句都引用相同的方法。 在第二個函數調用中,參數 c 被賦予默認值 1。
同樣,python 中很少有預定義的方法表現出多態性特徵,其中單個方法可以接受不同數據類型的參數。 像 len() 這樣的方法展示了這個特性。 這是說明這一點的代碼。
打印(len([ 1 , 2 , 3 , 4 ])) 打印(len(( 1 , 2 , 3 , 4 ))) 打印(len( “python” )) print(len({ “key1” : “value1” , “key2” : “value2” })) |
在上面的代碼中,相同的 len() 方法用於列表、元組、字符串和字典。
結帳:現實世界中的 Python 應用程序
運算符重載
像“+”這樣的運算符可以以多種方式使用。 例如,它可以用於添加兩個數字、字符串以及列表等。下面是演示的代碼。
l1=[ 1 , 2 , 3 ] l2=[ 3 , 4 , 5 ] n1= 2 n2= 3 s1= “嘿” s2= “那裡” 打印(l+l1) 打印(s1+s2) 打印(n1+n2) |
方法覆蓋
方法覆蓋也被認為是運行時多態性,它被 java、c++ 和 python 等許多語言支持。
這個特性與繼承有關,python中的子類從其父類繼承成員函數和成員變量。 而如果我們覺得父類方法的實現不相關,那麼我們可以在子類中重寫那個方法。 並且根據子類的要求修改成員函數稱為方法覆蓋。
類two_wheeler : def燃料(自身): 打印( “兩輪車需要燃料才能運行” ) 默認容量(自我): print( “自行車最多可容納 2 人” ) 電動自行車類(雙輪車): def燃料(自身): 打印( “電動自行車靠電池運行” ) 類汽油自行車( two_wheeler ): def燃料(自身): 打印( “汽油自行車運行汽油” ) 自行車=two_wheeler() 電動自行車=電動自行車() pbike=汽油自行車() 自行車.燃料() 自行車.容量() ebike.fuel() ebike.容量() pbike.fuel() pbike.容量() |
在上面的代碼中,two_wheeler 是父類,而electric_bike、petrol_bike 是子類。 子類electric_bike 和petrol_bike 繼承了fuel()、capacity() 方法。 現在,如果需要,我們可以更新方法的實現,並且在electric_bike 類中我們重新實現了fuel() 方法,類似地在petal_bike 類中重新實現了fuel() 方法。
例如,在代碼中 ebike.fuel() 打印“電動自行車使用電池運行”,pbike.fuel() 打印汽油自行車使用汽油運行”。
類方法中的多態性
Python 允許不同的類具有相同的方法名,這屬於多態特性。 而方法的調用是基於我們用來調用方法的對象。
類自行車: def燃料(自身): print( “自行車不需要任何燃料!” ) 默認容量(自我): print( “自行車適合單人騎行” ) 電動自行車類: def燃料(自身): 打印( “電動自行車靠電池運行” ) 默認容量(自我): 打印( “電動自行車最多可容納 2 人” ) 類汽油自行車: def燃料(自身): 打印( “汽油自行車運行汽油” ) 默認容量(自我): 打印( “汽油自行車最多可容納 2 人” ) 生態自行車=自行車() 電動自行車=電動自行車() pbike=汽油自行車() l = [生態自行車,電動自行車,pbike] 對於l中的obj : obj.fuel() obj.容量() |
在上面的代碼中,我們創建了自行車、電動自行車和汽油自行車三個類的三個對象。 並且所有三個類都具有相同的方法名稱。 現在,編譯器的任務是根據用於調用方法的對像類型來決定必須調用哪個方法。
例如,ecobike.fuel() 將調用bike 類的fuel() 方法,而ebike.fuel() 將調用electric_bike 類的fuel() 方法。 我們將所有這些對象附加到一個列表中,並且在每次迭代中,我們將調用相同的函數名稱,但調用該方法的對像類型將會改變。 在第一次迭代中調用了bike 類的方法,並在進一步迭代中調用了electric_bike、petrol_bike 的方法。
閱讀: Python 項目理念和主題
結論
在本文中,我們了解了多態的含義,討論了 Python 在方法重載的情況下有何不同。 演示了 Python 中多態性的各種可能性,例如運算符重載、函數多態性、方法覆蓋和類方法中的多態性。
現在您已經了解了 python 中的多態性,使用所有這些功能實現您的下一個 python 代碼!
如果您想了解數據科學,請查看 IIIT-B 和 upGrad 的數據科學 PG 文憑,該文憑專為在職專業人士而設,提供 10 多個案例研究和項目、實用的實踐研討會、與行業專家的指導、1-與行業導師面對面交流,400 多個小時的學習和頂級公司的工作協助。