一文帶你了解python中的多態(tài)性
多態(tài)性是 OOP 的一個特征,這意味著一個名稱可以具有不同的功能。 單個實體可以采取不同的形式。
本篇文章將介紹如何在 Python 中實現(xiàn)多態(tài)性。
Python 中的多態(tài)性
理解這一點的最佳方法是使用 len() 函數(shù)。 對于不同的對象,該函數(shù)有不同的解釋。
對于列表,它將返回存在的總元素;對于字符串,它將返回存在的總字符。
代碼:
lst = ['fql', 'jiyik'] s = 'fqljiyik' print(len(lst), len(s))
輸出:
2 8
說明 Python 中多態(tài)性的另一個常見功能是 + 運算符。 該運算符可以在 Python 中執(zhí)行兩個數(shù)字之間的加法。
但是,當(dāng)與字符串一起使用時,它充當(dāng)連接運算符來組合兩個字符串。
代碼:
a = 5 + 6 s = 'fql' + 'jiyik' print(a, s)
輸出:
11 fqljiyik
在 Python 中使用類方法實現(xiàn)多態(tài)性
Python 中的一切都是對象,并且屬于某個類。 這些方法與類的對象相關(guān)聯(lián)。
這就是為什么 + 運算符和 len() 函數(shù)對不同的對象執(zhí)行不同的功能。 + 運算符調(diào)用為不同對象定義不同的魔術(shù)函數(shù)。
我們可以創(chuàng)建我們的類并實現(xiàn)這一目標(biāo)。 兩個類可以具有相同名稱的函數(shù),但具有不同的用途和不同的定義。
代碼:
class A: def fun(self): print("Class A") class B: def fun(self): print("Class B") ob1 = A() ob2 = B() for i in (ob1, ob2): i.fun()
輸出:
Class A
Class B
在 Python 中使用方法重寫實現(xiàn)多態(tài)性
Python 中的多態(tài)性也與類繼承相關(guān)。 繼承是指一個類訪問另一個類的功能。
一個類及其子類可能包含同名的函數(shù),我們可以在Python中使用函數(shù)重寫。 使用方法重寫,我們可以在子類中實現(xiàn)已經(jīng)定義的方法。
我們可以根據(jù)子類重新定義函數(shù)。
代碼:
class A: def fun(self): print("Class A") class B(A): def fun(self): print("Class B") ob1 = A() ob2 = B() for i in (ob1, ob2): i.fun()
輸出:
Class A
Class B
在上面的代碼示例中,類 B 繼承自類 A,但 fun() 方法在類 B 中被重寫,并根據(jù)類進行定義。
我們還可以在重寫函數(shù)中從 A 類訪問函數(shù) fun()。
代碼:
class A: def fun(self): print("Class A") class B(A): def fun(self): A.fun(self) print("Class B") ob2 = B() ob2.fun()
輸出:
Class A
Class B
在 Python 中使用函數(shù)和運算符重載實現(xiàn)多態(tài)性
函數(shù)重載是實現(xiàn)多態(tài)性的一個有趣的功能。 Python 中沒有此功能,Python 中將調(diào)用最近定義的函數(shù)。
Python 中可以重載運算符。 我們知道,不同的運算符可以根據(jù)對象類型執(zhí)行不同的功能,使用 + 運算符可以清楚地看出。
發(fā)生這種情況是因為每當(dāng)使用運算符時它都會在內(nèi)部調(diào)用魔術(shù)函數(shù)。 例如,+ 運算符在內(nèi)部調(diào)用 __add__ 方法。
這個神奇的函數(shù)在其名稱前后都有雙下劃線。 魔法函數(shù)并不意味著直接調(diào)用,但我們可以為不同的類定義它們來修改不同運算符的行為。
代碼:
class A: def __init__(self, a): self.a = a def __add__(self, o): return self.a + o.a + 2 ob1 = A(5) ob2 = A(4) print(ob1+ob2)
輸出:
11
到此這篇關(guān)于一文帶你了解python中的多態(tài)性的文章就介紹到這了,更多相關(guān)python多態(tài)性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)切割url得到域名、協(xié)議、主機名等各個字段的例子
今天小編就為大家分享一篇python實現(xiàn)切割url得到域名、協(xié)議、主機名等各個字段的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python實現(xiàn)wav和pcm的轉(zhuǎn)換方式
這篇文章主要介紹了Python實現(xiàn)wav和pcm的轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05Python-OpenCV實現(xiàn)圖像缺陷檢測的實例
本文將結(jié)合實例代碼,在Jupyter Notebook上使用Python+opencv實現(xiàn)如下圖像缺陷檢測。需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06讓Django的BooleanField支持字符串形式的輸入方式
這篇文章主要介紹了讓Django的BooleanField支持字符串形式的輸入方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05