簡單分享下python多態

目錄:

????????一、多態是啥嘞(龍生九子各有不同,這就是多態)

? ? ? ? 二、基礎的實例

? ? ? ? 三、多態的優勢與應用場景

? ? ? ? 四、深入理解

一、多態是啥嘞(龍生九子各有不同,這就是多態)

多態(Polymorphism),顧名思義,就是多種形態。

在面向對象編程(OOP)中,它指的是允許你使用一個接口來表示不同的類型的能力。簡單來說,就是同一種行為可以根據發送消息的對象的不同而采用不同的行為方式。

比如,動物園里有各種動物,它們都有“叫”的能力,但是每種動物叫的方式不同。狗會“汪汪”,貓會“喵喵”。如果我們設計一個“動物”類,并讓每種動物都繼承這個類,然后定義一個“叫”的方法,就能實現多態。

在Python這樣的動態語言中,多態的實現尤為自然和靈活,因為Python是基于“鴨子類型”(Duck Typing)的,關注的是“是不是能做某事”,而不是“是什么”。

二、基礎的實例

#?定義一個基礎的動物類
class?Animal:
????def?speak(self):
????????pass

#?狗類繼承動物類,重寫speak方法
class?Dog(Animal):
????def?speak(self):
????????return?"汪汪"

#?貓類同樣繼承動物類,重寫speak方法
class?Cat(Animal):
????def?speak(self):
????????return?"喵喵"

def?animal_sound(animal):
????#?不管傳入什么動物,只要它能speak就行
????print(animal.speak())

#?實例化并調用
dog?=?Dog()
cat?=?Cat()

animal_sound(dog)??#?輸出:?汪汪
animal_sound(cat)??#?輸出:?喵喵

在這個例子中,animal_sound函數并不關心是什么類型的動物,什么動物都有叫的能力,只要它有一個speak方法就可以。這就是多態的魅力,每個動物都能發出他們不同的叫的動作——通過統一的接口來處理不同的對象類型。

三、多態的優勢與應用場景

1、代碼復用與擴展性:多態通過提供一個通用的交互界面,使得針對不同對象類型的操作能夠集中處理,從而避免了為每個具體類型編寫重復的控制邏輯。

在上述示例中,多態減少了代碼重復,使得添加新的動物種類時,無需修改已有的函數,只需增加新的子類即可。

2、提高工作效率:在大型項目中,多態能夠幫助我們快速定位和修改問題,減少因類型檢查而導致的錯誤,使開發更加高效。

3、實際應用場景

  • GUI編程:按鈕、文本框等控件都可能需要響應“點擊”事件,盡管它們的行為細節不同,但都可以通過相同的接口來處理事件。

  • 數據處理框架:如Pandas庫,無論是DataFrame還是Series,都可以通過.apply()方法應用自定義函數,這是多態在實際庫中的體現。

  • Web框架:如Django的視圖函數可以處理不同類型的請求,只要這些請求符合預期的接口規范。

四、深入理解

為了更好地利用多態,Python提供了abc模塊,用于定義抽象基類(Abstract Base Class, ABC)。抽象基類不能被實例化,其目的是為子類提供一個必須實現的接口規范。

from?abc?import?ABC,?abstractmethod

class?AbstractAnimal(ABC):
????@abstractmethod
????def?speak(self):
????????pass

#?如果不實現speak方法,Dog類將無法實例化
class?Dog(AbstractAnimal):
????def?speak(self):
????????return?"汪汪"

#?嘗試實例化未實現speak的類會報錯
#?class?SilentAnimal(AbstractAnimal):
#?????pass

#?animal?=?SilentAnimal()??#?這里會報TypeError

好啦啦啦,今天的分享就到這里了,有喜歡的哥哥姐姐們,歡迎大家留言指點^_^如果本文對你有幫助,請點贊、轉發哦

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42137.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42137.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ffmpeg 獲取視頻時長的命令及其輸出

要獲取視頻的時長,可以使用FFmpeg的-i參數,后跟視頻文件的路徑。下面是獲取視頻時長的命令示例: ffmpeg -i input.mp4輸出示例: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from input.mp4:Metadata:major_brand : mp42minor_vers…

筆記14:程序中的循環結構

生活中的循環現象: -日復一日,年復一年 -春夏秋冬,四季交替 -周日,周一,周二,周三,周四,周五,周六 -人生是一個輪回,多年后,又會回到最初的原點 …

C++|哈希應用->布隆過濾器

目錄 一、概念 二、模擬實現 三、布隆過濾器擴展應用 上一篇章學習了位圖的使用,但它只適用于整數,對于要查詢字符串是否在不在,位圖并不能解決。所以針對這一問題,布隆過濾器可以派上用場,至于布隆過濾器是什么&am…

全球首款商用,AI為視頻自動配音配樂產品上線

近日,海外推出了一款名為Resona V2A的產品,這是全球首款商用視頻轉音頻 (V2A) 技術產品。這項突破性技術利用AI,僅憑視頻數據即可自動生成高質量、與上下文相關的音頻,包括聲音設計、音效、擬音和環境音,為電影制作人、…

linux內核開發之tftp服務搭建

TFTP (Trivial File Transfer Protocol) 是一個簡單的文件傳輸協議,通常用于在計算機網絡中進行文件傳輸。它是FTP的一個簡化版本,主要用于在局域網內部傳輸文件。 主要特點和用途: 簡單性: TFTP設計簡單,功能有限&am…

Hi3861 OpenHarmony嵌入式應用入門--TCP Server

本篇使用的是lwip編寫tcp服務端。需要提前準備好一個PARAM_HOTSPOT_SSID宏定義的熱點,并且密碼為PARAM_HOTSPOT_PSK LwIP簡介 LwIP是什么? A Lightweight TCP/IP stack 一個輕量級的TCP/IP協議棧 詳細介紹請參考LwIP項目官網:lwIP - A Li…

主流I/O模型總結

異步通知I/O模型(Windows) #include<string.h> #include<stdio.h> #include<WinSock2.h> #define BUF_SIZE 100 void CompressSockets(SOCKET hSockArr[], int idx, int total); void CompressEvent(WSAEVENT hEventArr[], int idx, int total); char msg[B…

奇景光電戰略投資Obsidian,共筑熱成像技術新未來

5月29日,業界領先的IC設計公司奇景光電宣布,將對熱成像傳感器解決方案制造商Obsidian進行戰略性投資,并以主要投資者的身份,參與到Obsidian的可轉換票據融資活動中。雖然奇景光電并未公開具體的投資金額,但這一舉動無疑向市場傳遞了一個明確的信號:奇景光電對Obsidian的技…

【INTEL(ALTERA)】為什么我會看到包含管道橋的Nios II設計出現 Flash Programmer 問題?

目錄 說明 解決方法 說明 簡化地址解碼的常見解決方案是將連接到Avalon管道橋后Nios II處理器的數據主的外設放置&#xff0c;有時可能包括一些內存 IP&#xff0c;如片上 RAM。 但是&#xff0c;如果預期內存包含Nios II程序代碼&#xff0c;則應該以與Nios II指令主連接到…

10、matlab中字符、數字、矩陣、字符串和元胞合并為字符串并將字符串以不同格式寫入讀出excel

1、前言 在 MATLAB 中&#xff0c;可以使用不同的數據類型&#xff08;字符、數字、矩陣、字符串和元胞&#xff09;合并為字符串&#xff0c;然后將字符串以不同格式寫入 Excel 文件。 以下是一個示例代碼&#xff0c;展示如何將不同數據類型合并為字符串&#xff0c;并以不…

【Mindspore進階】-03.ShuffleNet實戰

ShuffleNet圖像分類 當前案例不支持在GPU設備上靜態圖模式運行&#xff0c;其他模式運行皆支持。 ShuffleNet網絡介紹 ShuffleNetV1是曠視科技提出的一種計算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一樣主要應用在移動端&#xff0c;所以模型的設計目標就是利用有…

如何在Java中實現自動化測試和集成測試

如何在Java中實現自動化測試和集成測試 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 自動化測試和集成測試是現代軟件開發過程中至關重要的環節。Java作為一…

分享實現地鐵車輛側面圖

簡介 通過偽類和關鍵幀動畫實現地鐵車輛側面圖 在線演示 偽元素和關鍵幀動畫 實現代碼 <!DOCTYPE html><html><head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <meta http-equiv"X-UA-Co…

設計模式之單例模式(Java)

單例模式實現方式&#xff1a;懶漢式、餓漢式、雙重檢查、枚舉、靜態內部類&#xff1b; 懶漢式&#xff1a; /*** 懶漢式單例模式* author: 小手WA涼* create: 2024-07-06*/ public class LazySingleton implements Serializable {private static LazySingleton lazySinglet…

對BSV區塊鏈的曼達拉網絡通俗易懂的解釋

??發表時間&#xff1a;2023年6月15日 BSV區塊鏈正在引入“曼達拉”升級&#xff0c;使BSV區塊鏈網絡的拓撲結構能夠適配Teranode&#xff0c;適配這個可以大幅擴容的節點軟件。BSV區塊鏈上曼達拉網絡的概念并不會改變整個系統的核心規則&#xff1b;相反&#xff0c;它能夠引…

為什么https比http更安全

讀完本文&#xff0c;希望你能明白&#xff1a; HTTP通信存在什么問題HTTPS如何改進HTTP存在那些問題HTTPS工作原理是什么 一、什么是HTTPS HTTPS是在HTTP上建立SSL加密層&#xff0c;并對傳輸數據進行加密&#xff0c;是HTTP協議的安全版。現在它被廣泛用于萬維網上安全敏感…

【qt】如何獲取本機的IP地址?

需要用到這個類QHostInfo和pro里面添加network模塊 用這個類的靜態函數forName()來獲取該主機名的信息 返回的就是這個類 這個QHostInfo類就包括主機的IP地址信息 用靜態函數addresses()來獲取 返回的是一個QHostAddress的容器 QList<QHostAddress>addrList hostIn…

Laravel隊列機制深度解析:異步任務處理的高效之道

Laravel隊列機制深度解析&#xff1a;異步任務處理的高效之道 Laravel的隊列系統是一個強大的工具&#xff0c;用于執行后臺任務和異步處理。它允許開發者將耗時的任務&#xff0c;如發送郵件、處理圖片等&#xff0c;放入隊列中&#xff0c;然后由后臺工作進程異步執行。本文…

Docker 鏡像移動或復制到另一臺服務器

在實際的開發和部署過程中&#xff0c;我們可能需要將 Docker 鏡像從一臺服務器移動或復制到另一臺服務器。本文將詳細介紹如何實現這一操作&#xff0c;幫助你更好地管理和遷移 Docker 鏡像。 一、使用 docker save 和 docker load 命令 docker save 和 docker load 是 Dock…

課題申報書中要用的思路圖(技術路線圖)30張,超高清!

最近在弄課題申報書的時候&#xff0c;需要畫“技術路線圖”&#xff1b;和小伙伴們探討才發現很多人居然不會畫這種圖&#xff0c;還有很多人在Word里面一點一點拼湊…… 我給大家收集了網上非常熱門的30張“技術路線圖”&#xff0c;但網上流傳的都太模糊了&#xff0c;想看…