Python 之抽象方法 @abstractmethod 的理解

如果你熟悉 Java 的話,Java 里有一個抽象接口的概念,Python 里的抽象方法基本上與其類似。

在 Python 中,@abstractmethod?是一個裝飾器,用于定義抽象方法。它是實現抽象基類(Abstract Base Class, ABC)的核心工具,通過?abc?模塊提供。抽象方法要求子類必須實現該方法,否則子類無法被實例化(當然,如果子類本身只是作為中間類,不需要實例化的話,也是無需實現該方法的)。

抽象基類(ABC):包含至少一個抽象方法的類,不能直接實例化。

抽象方法:聲明但不實現的方法(只有方法簽名),子類必須重寫

作用:強制子類實現特定方法,確保接口一致性(類似 Java?的接口)。

from abc import ABC, abstractmethod# 抽象基類
class Animal(ABC):@abstractmethoddef make_sound(self):pass  # 無具體實現def sleep(self):  # 非抽象方法(可選實現)print("Zzz...")# 子類必須實現抽象方法
class Dog(Animal):def make_sound(self):return "Woof!"class Cat(Animal):def make_sound(self):return "Meow!"# 正確用法
dog = Dog()
print(dog.make_sound())  # 輸出: Woof!# 錯誤示范:未實現抽象方法的子類
class Bird(Animal):pass  # 未重寫 make_sound# 嘗試實例化會報錯
try:bird = Bird()  # TypeError: Can't instantiate abstract class Bird with abstract method make_sound
except TypeError as e:print(e)  # 輸出錯誤信息animal = Animal()  # TypeError: Can't instantiate abstract class Animal with abstract method make_sound

一般常用于以下用途:

定義接口規范:強制子類實現特定 API。

框架設計:確保插件或擴展實現必要方法。

類型檢查:結合?isinstance()?檢查對象是否實現了接口。

特性說明
目的強制子類實現特定方法
使用場景定義接口、框架設計、多態約束
關鍵裝飾器@abstractmethod
基類要求繼承?ABC?或使用?metaclass=ABCMeta
實例化限制抽象基類和未實現全部抽象方法的子類不能被實例化

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

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

相關文章

深度學習·pytorch

廣播機制 從末尾開始逐個維度遍歷兩個矩陣的shape,如果維度不相同,則考慮廣播:任一方的維度為1或者維度不存在(小矩陣廣播為大矩陣),這樣的運算可以廣播 可以廣播的例子 xtorch.empty(5,3,4,1) ytorch.empty(3,1,1) (x.add_(y)).s…

SpringBoot集成deepseek

pom文件&#xff1a;<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org…

JetBrains Annotations:從入門到落地,徹底告別 NullPointerException

本文基于三篇高質量博客&#xff08;JetBrains Annotations官方文檔、Jakarta Validation 規范、《Effective Java》第3版&#xff09;的原文內容&#xff0c;結合作者在一線研發團隊落地 JetBrains Annotations 的實戰經驗&#xff0c;系統梳理了該注解庫的核心能力、使用姿勢…

基于Rust與HDFS、YARN、Hue、ZooKeeper、MySQL

基于Rust與HDFS、YARN、Hue、ZooKeeper、MySQL集合 以下是基于Rust與HDFS、YARN、Hue、ZooKeeper、MySQL等技術棧結合的實例,涵蓋不同場景和應用方向: 數據處理與分析 使用Rust編寫MapReduce作業,通過YARN提交到HDFS處理大規模數據集。Rust的高性能特性適合處理密集型計算…

芯片上市公司正在放棄射頻業務

轉載自--鐘林談芯射頻芯片賽道本來不卷的&#xff0c;投資人多了也就卷了。本周&#xff0c;多家媒體報道某芯片上市公司終止射頻業務&#xff0c;終止射頻業務的何止一家芯片上市公司&#xff0c;從去年開始就逐漸有上市公司終止射頻業務&#xff0c;開啟清貨模式。如人飲水&a…

Jmeter 性能測試監控之ServerAgent

使用 Jmeter 對 Linux 服務器的進行壓測時&#xff0c;想要監控服務器的 CPU 、內存&#xff0c;可以通過添加插件 【ServerAgent】來觀察,可以實時監控性能指標 一、ServerAgent-2.2.3下載 下載地址&#xff1a; GitCode - 全球開發者的開源社區,開源代碼托管平臺 二、通過插…

5.蘋果ios逆向-過ssl證書檢測和安裝ssh和獲取root權限

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a;圖靈Python學院 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

Navicat 17 教程:Windows 和 Mac 系統適用

一、引言 對于程序員們來說&#xff0c;Navicat是一款極為實用的數據庫管理工具。Navicat 17更是帶來了諸多新特性&#xff0c;能大大提升我們的工作效率。今天就為大家帶來Navicat 17在Windows和Mac系統上的使用教程。 二、準備工作 &#xff08;一&#xff09;下載安裝包 「…

Android 中 實現柱狀圖自定義控件

一、基本思路 創建自定義控件的數據模型; 創建一個自定義 View 類,繼承自 View; 在初始化方法中獲取自定義屬性的值。 創建設置數據方法,將數據模型列表轉換成自定義繪制時的數據; 重寫 onDraw 方法,以實現自定義的繪制邏輯。 二、主要繪制方法 1、drawLine 繪制直線 p…

Netty 核心原理與實戰:從 DiscardServer 看透 Reactor 模式與組件協作

目錄 Netty 是什么&#xff1f; Netty 的目標 Netty 實戰案例 DiscardServer 服務端程序 NettyDiscardServer 業務處理器 NettyDiscardHandler 配置類 NettyDemoConfig 回顧 Reactor 模式中的 IO 事件處理流程 Netty 中的 Channel Netty 中的 Reactor Netty 中的 Han…

關于“LoggerFactory is not a Logback LoggerContext but Logback is on ......“的解決方案

? ?重磅&#xff01;盹貓的個人小站正式上線啦&#xff5e;誠邀各位技術大佬前來探秘&#xff01;? 這里有&#xff1a; 硬核技術干貨&#xff1a;編程技巧、開發經驗、踩坑指南&#xff0c;帶你解鎖技術新姿勢&#xff01;趣味開發日常&#xff1a;代碼背后的腦洞故事、工具…

2025年6月電子學會青少年軟件編程(C語言)等級考試試卷(三級)

答案和更多內容請查看網站&#xff1a;【試卷中心 -----> 電子學會 ----> C/C ---->三級】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 編程題 第 1 題 打印城門 題目描述 給定一個正整數 n&#xff0c;輸出如下的星號城門。具體格式請見樣例。 輸入格…

跨平臺直播美顏SDK開發指南:兼顧性能與美型效果的最佳實踐

面對iOS、Android乃至Web等多端應用需求&#xff0c;如何開發一款真正跨平臺、兼顧性能與美型效果的美顏SDK&#xff0c;成為眾多開發團隊和產品經理的一道必答題。 今天筆者這篇文章&#xff0c;就從架構設計、性能優化、視覺效果調校三個關鍵維度&#xff0c;帶你深入解析跨平…

2025數字藏品安全保衛戰:高防CDN如何成為NFT應用的“隱形護甲”?

副標題&#xff1a; 從DDoS防御到全球加速&#xff0c;拆解數字資產平臺的生死防線&#x1f310; 引言&#xff1a;當數字藏品成為黑客的“頭號靶場”2025年全球數字藏品市場突破$1000億&#xff0c;但安全事件同步激增230%——某頭部NFT平臺因3.2Tbps DDoS攻擊癱瘓&#xff0c…

linux 執行sh腳本,提示$‘\r‘: command not found

1、在Linux下執行某個腳本文件卻提示$\r: command not found&#xff0c;如下圖:2、錯誤原因:a、 Windows 風格的換行符&#xff1a;Windows 系統使用 \r\n 作為行結束符&#xff0c;而 Linux 和 Unix 系統使用 \n。當你從 Windows 環境中復制文本到 Linux 環境時&#xff0c;可…

使用HaiSnap做了一款取件碼App(一鍵生成)

你是否懷揣著奇思妙想&#xff0c;卻因不懂代碼而對開發應用望而卻步&#xff1f;現在&#xff0c;有一個神奇AI Agent&#xff08;響指HaiSnap&#xff09;&#xff0c;一個響指就能實現&#xff0c;你說神奇不&#xff1f;只需要一句話就可以生成你想要的應用&#xff01;讓你…

容器與虛擬機的本質差異:從資源隔離到網絡存儲機制

目錄 專欄介紹 作者與平臺 您將學到什么&#xff1f; 學習特色 容器與虛擬機的本質差異&#xff1a;從資源隔離到網絡存儲機制 一、容器與虛擬機的本質區別 1.1 資源抽象層次差異 1.2 資源消耗與性能對比 1.3 隔離性深度差異 二、容器網絡基礎架構 2.1 Docker網絡模型…

ros2 launch文件編寫詳解

一個完整的簡單的launch文件配置過程1.編寫launch文件2.配置package.xml3.配置setup.py&#xff08;python包&#xff09;4.配置CMakeList(C包)5.編譯運行# 在 ROS 2 的 Python 啟動文件中&#xff0c;這些導入語句用于引入各類啟動模塊&#xff0c;以構建和配置節點啟動流程 f…

QT中QTableView+Model+Delegate實現一個demo

一、概述功能: 實現一個查詢學生信息的表格&#xff0c;有學號、性別、年齡、班級和分數共5列&#xff0c;針對最后一列分數實現委托代理&#xff0c;要求能編輯和查看該分數列。QTableView實現視圖展示uiModel負責數據的構造Delegate是委托&#xff0c;可針對某列數據做自定義…

用latex+vscode寫論文

文章目錄 前言 一、下載texlive安裝包 二、安裝texlive 1.安裝 2.配置環境變量 3.檢查是否安裝成功 三、安裝vscode 四、vscode中安裝latex workshop插件 五、創建latex文檔 六、撰寫+編譯+預覽 七、latex workshop常用設置 1.打開設置頁面 2.設置自動保存代碼 3.設置自動編譯代…