python支援多型嗎 Python中的多型

2021-10-19 21:33:30 字數 2029 閱讀 2771

物件導向的語言有四個特性,抽象、封裝、繼承和多型。在之前的文章中,給小夥伴們已經講解了前三個。為什麼要把多型放在最後乙個講呢?因為前面的三個特性是多型的基礎,了解了前三個,了解多型就很容易啦~

那麼,什麼是多型呢~直接看程式語言中的定義稍顯枯燥,我們還是先給大家舉一些生活中常見的例子。

多型指的是一類事物有多種形態,比如說動物,有體型龐大的大象,也有非常小的螞蟻。即便同屬於貓科動物,有威猛霸氣的老虎,也有小巧可愛的貓咪。這些都可以看作是一類事物。雖然他們有著不同的形態,但是有很多的相同之處。

小夥伴們看到這裡是不是想到了繼承中的父類和子類了。python中的多型確實和繼承有關係,但是二者還是不一樣的,接下來會給大家詳細講解。

python中的多型

既然多型是物件導向語言的共有特性,那麼,肯定不僅僅是python中有多型這個特性。在物件導向的語言中,我們把具有多型這個特性稱為多型性。多型性指的是向不同的物件傳送同一條訊息,不同的物件在接收時會產生不同的行為。聽起來是不是有點拗口。簡單點說,就是說不同物件中都有乙個名稱相同的方法,我們可以通過相同的方法名去呼叫這些方法,但是執行這個方法時產生的行為是不一樣的。

在程式語言中,類的多型是有著嚴格要求的,不僅僅要滿足我們上面提到的不同物件有著相同的方法,還需要滿足兩個條件。

第乙個條件,多型特性體現在子類和父類之間,也就是說不同的物件之間是存在繼承關係的。

第二個條件,子類一定是重寫了父類的方法。這個我們在之前也講到過。子類和父類是有一定的區別的,反映在類的方法上,就是雖然是一樣的方法名,但是執行方法的**是有有所不同的。

這些多型的要求,在python中是可以滿足的。我們來看乙個例子。

首先我們定義了乙個animal的父類,它有乙個introduction的方法。然後我們生成了兩個子類,cat和dog,這兩個類都重寫了父類animal的introdution方法。

然後,我們定義了乙個方法intro(),這個方法有乙個引數,就是animal。方法的內部**是animal呼叫introduction()方法。

接下來,我們分別生成了animal、cat和dog的例項物件,把這三個物件分別作為引數傳給intro方法,得到了不同的輸出。

有些小夥伴們看到這裡可能會覺得,這就是多型嗎?沒發現有什麼特別的呀。這些小夥伴們,你們再細品一下~

多型其實是乙個非常有用的特性。它使得我們的程式可以非常靈活。比如說,我們的程式在最開始的時候呼叫的是父類的方法。隨著後續的改進,我們繼承父類產生了很多子類。只要我們保持子類方法的名稱不變,仍然可以像呼叫父類方法一樣去呼叫子類方法。就像這裡的intro方法,我們什麼都沒改變,就可以呼叫三個類的方法,是不是特別省事呢~

python中多型的獨特性

剛才我們說了這麼多,還是說python中和一般物件導向語言相同的地方,那麼,python中的多型有沒有自己的特點呢?

當然是有的。python是一種非常靈活的語言。它在執行乙個方法的時候,不會去檢查這個方法的具體型別。只要方法的名稱一樣,它就會去執行。

這就引出乙個非常有意思的概念,叫鴨子型別。這個概念的名字**於由james whitcomb riley提出的鴨子測試,「鴨子測試」可以這樣表述:「當看到乙隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這只鳥就可以被稱為鴨子。具體在python中的例子,我們來看乙個例子

可以看到,我們定義了乙個duck類,有walk、swim、crow三個方法,同時,我們定義了乙個person類, person類擁有跟duck類一樣的方法。當有乙個函式呼叫duck類,並利用到了兩個方法walk()和swim()。我們傳入person類也一樣可以執行,python中的函式並不會檢查物件的型別是不是duck,只要它擁有walk()和swim()方法,就可以正確的被呼叫。

結束語和一般的物件導向語言一樣,python的多型使得我們可以更靈活的呼叫物件的方法,同時因為python自身的語言特性,我們在多型的使用上會更加的方便。小夥伴們學完這一篇,一定要結合前面的認認真真的複習,掌握物件導向的四個特性哦~

python有多型嗎 Python 多型

python多型 思維導圖 多型概念 一種事物具備多種 不同的形態 例如 水 固態 液態 氣態 官方解釋 多個不同類的物件可以響應同乙個方法,產生不同的結果 首先強調多型不是一種特殊的語法,而是一種狀態 特性 即多個不同物件可以響應同乙個方法,產生不同結果 好處 對於使用者而言,大大的降低了使用難度...

Python支援多重繼承嗎?

繼承是物件導向程式設計的乙個重要方式,通過繼承,子類可以擴充套件父類的功能,python也具有該特性,除此之外,python還可以使用多重繼承。語法 class subclass base1,base2 1.繼承只會繼承父類的方法,不能繼承父類的變數 2.要想繼承父類的變數,需要執行父類的 init...

python2用什麼支援中文編碼 python2

python 中文編碼 前面章節中我們已經學會了如何用 python 輸出 hello,world 英文沒有問題,但是如果你輸出中文字元 你好,世界 就有可能會碰到中文編碼問題。python 檔案中如果未指定編碼,在執行過程會出現報錯 usr bin python print 你好,世界 以上程式執...