面向對象特性之三:多態(Python進階教程)

2020-12-06 程式設計師編程學習

今天我們要講一講面向對象的第三個特性:多態;

什麼叫做多態?從字面意思上理解,就是一個函數具有多種形態。本質上其實就是同一操作方法作用於不同的對象時,有著不同的解釋,執行不同的邏輯,產生不同的結果。今天我們還是用例子來說明在Python中多態的使用方法、注意事項和使用的優點。

多態

你還是這家快要上市的快遞公司的老闆,你手底下的部門有很多個了,其中有兩個重要的部門,一個叫做「海運部門」,可以定義成一個「海運部門類」,專門負責海上的物流快遞運輸,一個叫做「空運部門」,可以定義成一個「空運部門類」,專門負責航空的物流快遞運輸。這兩個類是「部門類」的子類,下面我們用代碼來表示一下這三個類:

在上例中,我們定義了三個類,主類叫做「部門類」,兩個子類繼承於該類,分別代表「海運部門」和「空運部門」,這兩個類除了都有自己的構造函數之外,還有著一個具有相同名稱的方法,我們暫且叫做「送貨」方法。這兩個類實例化對象後,都調用各自的「送貨」方法後,我們看到,輸出的結果是不一樣的,也就是說,它們分別執行了各自類中的方法。

像上例中,不同的對象(海運部門和空運部門)雖然執行的方法(送貨)是同一個,但是執行的結果是不一樣的,在面向對象的程序設計中,通過相同的函數方法名去執行不同的動作,可以得到不同的結果,這樣的程序設計方法就叫做多態;

多態的思想其實是一類事物具有多種形態,就像上例,「部門類」具有多種形態,分別是「海運部門」和「空運部門」。多態是與繼承結合在一起的,因此多態的概念依賴於繼承。

注意:

學習過Python的朋友都知道,Python中的變量是弱類型的,也就是說,在定義時是不用指明該變量的類型,在運行時才確定其狀態。這點和Java、C++的區別很大,所以,有些人也稱Python是一種多態語言。最明顯的例子就是我們經常在用的一個函數:「len(object)」,這個python的內置函數不僅可以計算字符的長度,而且可以計算列表、元組等其他類型的數據個數,這正是多態的一種體現。

多態性

初學的時候經常容易把多態和多態性這兩個概念搞混淆,有時候面試的時候也會問到這個問題。如果說多態是一類事物具有多種形態的話,那多態性就是不同類型的實例具有相同的調用方法,我們用下面的例子來說明:

定義一個統一的接口:「func(c,peoplenum)」,調用時參數直接填入實例化的對象,可以直接調用該類的方法(一個接口,多種實現)。

使用多態的好處

增加程序的靈活性

調用者不管類裡面的方法是通過什麼邏輯實現,都只管使用一種方法去調用;

增加程序的可擴展性

即便在「部門類」裡再擴展其他的子類,調用者也不需要更改代碼,還是使用「func(c,peoplenum)」來調用;

相關焦點

  • Python零基礎入門教程,面向對象有哪三大特性?
    大綱(面向對象的三大特性)封裝性繼承性多態性封裝性封裝隱藏了對象的屬性和方法內部實現細節,僅對外提供公共訪問方式,類的內部可以訪問,外部不可以訪問。外部訪問私有變量或者私有方法報錯繼承性現實生活中狗與動物之間的關係,狗具有動物的全部特徵和行為,在面向對象中動物被稱為
  • Unity遊戲開發:C Sharp進階之面向對象編程
    C進階之面向對象編程深入淺出的C#進階課程在了解C#基礎語法之上,進一步學習面向對象(OOP)編程技術和.NET框架,並深入講解在實踐中總結出的OOP設計理念。學完本課程,即可設計出優質的面向對象程序,並可在Unity中用C#來開發所有腳本。
  • 大牛級別程式設計師帶小白入門Python,花7天整理最全面向對象教程!
    Python作為人工智慧首選程式語言,也是最近大家知道比較火的程式語言,Python從設計之初就已經是一門面向對象的語言,正因為如此,在Python中創建一個類和對象是很容易的。下面有大牛級別程式設計師帶小白入門Python,花7天整理最全面向對象教程!供參考學習!
  • Java中的面向對象三大特性之多態
    引用轉型基類的引用可以指向派生類的對象,如:BaseClass obj = new DerivedClass();這樣的語句是合法的;但是派生類的引用則不可以指向基類的對象,如如下圖:從上例中可以看出,父類的引用指向哪個類的實例就調用哪個類中的方法;同樣是使用父類的引用,調用同一個名稱的方法,卻可以得到不同的調用結果,這就是Java中的多態,即:同一函數,多種形態;實際上多態包括動態多態和靜態多態。
  • 【4】類的繼承和多態-簡易的Python面向對象教程
    前言 面向對象是所有高級語言(Python,Java,C++等)的基石,是重中之重。 這個文章系列的目的是通過簡單易懂的例子,深入淺出,讓Python學習者牢固的掌握Python面向對象的概念和方法。
  • JAVA面向對象的多態是個什麼東西?
    面向對象的三大特徵:封裝、繼承、多態。在前面已經說了過了封裝和繼承。今天就來聊聊剩下的多態。多態,從字面內容來看,就是多種形態,多種狀態。在java的面向對象中可以從以下兩個方面來講。於是我們同樣創建的動物的對象,同樣調用這個動物對象叫的方法,如果這個動物對象是貓,則會發出「喵喵」聲,而如果這個動物對象是狗,發出的聲音則成了「汪汪」。這就是不同之類之間體現出來的多態。在代碼上體現就是方法名稱,參數,返回值完全與父類相同,而不同的子類在方法體內的代碼邏輯不同。
  • Java面向對象之:封裝、繼承、多態
    Java面向對象之:封裝、繼承、多態高內聚和低耦合以下是一個多重繼承的例子:動物有胎生動物和卵生動物之分,胎生動物有老虎,老虎又分華南虎,東北虎,孟加拉虎等。運行類型: 對象的真實類型,Dog;運行類型--->對象的真實類型。編譯類型必須是運行類型的父類或與之相同,當編譯類型和運行類型不同的時候,多態就產生了。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    教程大合集,包含python所有就業方向,每套課程均來自市面上主流培訓機構的原版教程,價值都在數百元以上 每套課程均包含:視頻課程+課件+原始碼 重要:建議根據自己工作方向和需求,重點選擇2到3套課程學精,吃透,然後在工作 重要:零基礎小白建議先選擇零基礎全能篇的一套課程學精,然後再根據自 己的需求和規劃選擇學習其他方向課程,學完後一定要多實踐
  • 跟我學java編程—面向對象編程多態概念的理解
    前面介紹了面向對象的繼承思想,繼承思想其核心是代碼的復用和程序功能高度的擴展性。繼承可以直接實現代碼的復用,功能的擴展性是指繼承後的類在父類的基礎上增加新的行為,或者對父類的行為進行擴展,實現同一個行為具有不同的實現代碼。
  • opencv-python獲取圖像:面向對象與面向過程
    下面是分別用面向過程與面向對象的編程方法實現讀取本地圖像和打開攝像頭兩段代碼:# -*- coding: utf-8 -*-"""面向過程的編程方法,用函數把解決問題的步驟一步一步實現。運行環境:win10系統 python==3.6 opencv-contrib-python== 4.1.0第一行「# -*- coding: utf-8 -*-」 告訴Python解釋器,按照UTF-8編碼讀取原始碼"""import cv2image=cv2.imread('lena.JPG') #讀取本地圖片,
  • Java基礎之多態,動態綁定多態的代碼案例,簡單卻很重要
    一、多態多態基於繼承(),現實事物中經常可以看到人,而學生、工人、白領、太空人等都是人,即由人演變而來的多種狀態。多態是Java三大特性(封裝、繼承、多態)之一,它的出現豐富了完善了Java面向對象體系。
  • 在.NET中,C#舉例深度理解面向對象編程中的封裝、繼承和多態
    -面向對象編程1.什麼是面向對象編程?我們在沒有接觸類之前,所有的代碼都是堆在一起的,沒有面向對象的概念,但接觸了類/對象/繼承/接口之後,我們要建立自己的面向對象編程的概念,在編碼過程中,要讓自己編寫的程序是面向對象的,而不是堆代碼。微軟在.NET框架中推出的C#語言是面向對象的強類型程式語言。
  • python中類的繼承和多態
    繼承是為了代碼復用和設計復用而設計的,是面向對象程序設計的重要特徵之一。當我們設計一個新類時,如果可以繼承一個已有的設計良好的類然後進行二次開發,無疑會大幅度減少開發工作量。1.在python中繼承的一些特點:A、 在繼承中基類的構造函數(__init__()方法)不會被自動調用,它需要在其派生類的構造中親自專門調用B、 如果需要在派生類中調用基類的方法時,通過「基類名.方法名()」的方法來實現,需要加上基類的類名前綴,且需要帶上self
  • 面向對象的編程-多態「程式設計師培養之路第四十四天」
    在面向對象語言中,多態就是把子類對象賦值給父類引用,然後調用父類的方法,去執行子類覆蓋父類的那個方法。> public function work(){ echo "這個方法需要在子類具體實現"; } //從事何種工作 public function doWork($shenfen_obj){//通過傳入不同「身份」的對象
  • Java面向對象之接口——interface
    Java面向對象之接口——interface什麼是接口一般計算機中的接口分為對於同一種型號的主板上的多個USB插槽,他們有相同的數據交換方式,相同的實現細節;在面向對象的思想中,可認為他們都是同一個類的不同實例,也就是說插槽是USB規範的實例。
  • 面向對象編程
    面向對象編程(OOP)對於初學者來說可能是一個很難理解的概念。很多書籍都是從解釋OOP開始,討論三大術語:封裝、繼承和多態性,但是解釋的效果往往讓人失望。本文希望讓程式設計師、數據科學家和python愛好者們更容易理解這個概念。我們去掉所有的行話,通過一些例子來做解說。這篇文章是關於解釋OOP的外行方式。
  • 如何給女朋友解釋什麼是面向對象編程?
    女朋友拿著一本《面向對象編程》過來找我。什麼是面向對象?是要面向我寫代碼嗎?不是啦,這個面向對象的對象不是你這個對象啦。此時,我突然感受到了一股莫名的殺氣。什麼?你還有其他對象嗎?有我好看嗎?有我瘦嗎?不對。你不能有其他對象。
  • python教程之python數學運算
    中進行分數(fraction)運算分數運算是python中的一個模塊(module)。模塊是由別人寫的,並且可以被拿來直接使用的代碼程序,包括類、函數以及標籤的定義,是python標準函數庫的一部分。使用是必須先插入模塊。
  • 「Java三分鐘」Java三大特性——多態理解
    關注我,每天三分鐘,帶你輕鬆掌握一個Java相關知識點。多態顧名思義,指多種狀態。一個東西被人類創造,一定為了解決某種問題的,那麼多態存在是為了解決什麼問題呢?換言之,多態存在的意義是什麼?然而我們怎麼利用多態來解決這個問題呢?我們可以想一下,人類read這個方法就是接受小說這個對象,那麼我們能不能所有的小說抽象成一個類,並通過對這個類的不同實現來實現一種運行層面的動態呢?我們嘗試下這麼做:運行結果:看!
  • 「程式設計師之路」17什麼叫多態?
    面向對象三大特性:封裝、繼承和多態。今天學最後一個特性:多態。什麼叫多態呢?按照字面意思理解就是多種形態的意思。同一行為(吃東西),通過不同的事物(兔,貓,狗),可以體現出不同的形態(兔子吃胡蘿蔔,貓吃魚,狗吃肉),這就叫多態。一、多態的格式1.格式說明:父類引用指向子類對象。具體什麼意思呢?