当前位置: 首页 > news >正文

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.dtcms.com/a/306679.html

相关文章:

  • Day06_C++编程
  • 9《MySQL 教程》MySQL 的数据类型(2)
  • 云原生环境里的显示变革:Docker虚拟浏览器与cpolar穿透技术实战
  • 赵义弘-----补题报告
  • 【python】Python爬虫入门教程:使用requests库
  • 【git】在 GitLab 上如何把 A 分支(如 feature/xxx)合并到 B 分支(如 trunk)
  • Scala实现常用排序算法
  • 深入理解 Kotlin Flow:异步数据流处理的艺术
  • MidJourney精选图集与提示词生成器:AI创意灵感与高效提示词工具
  • composer 常用命令
  • 高防CDN与高防IP的选择
  • docker可视化管理工具lazydocker
  • 【百卷编程】Go语言大厂高级面试题集
  • 3GPP TS 38.331 V18.6.0 (2025-06)中文版
  • 工业5G路由器赋能高速公路实时监控
  • 【问题未解决-寻求帮助】VS Code 中使用 Conda 环境,运行 Python 后 PowerShell 终端输出内容立即消失
  • 《Java 程序设计》第 12 章 - 异常处理
  • T113-i Linux系统完整构建指南:从SDK开箱到内核镜像量产烧录全流程
  • 2025年湖北中级注册安全工程师报考那些事
  • docker 用于将镜像打包为 tar 文件
  • 【MySQL学习|黑马笔记|Day3】多表查询(多表关系、内连接、外连接、自连接、联合查询、子查询),事务(简介、操作、四大体系、并发事务问题、事务隔离级别)
  • 【公有云部署模型】yolo模型公有云部署
  • 用聊天方式聊聊msvcr100.dll丢失的解决方法有哪些?msvcr100.dll是什么
  • 7.pcl滤波(一)
  • Python在Web开发领域的崛起与生态探索:从脚本语言到全栈利器
  • Unity Standard Shader 解析(四)之ForwardAdd(简化版)
  • 机器视觉halcon7-缺陷检测
  • SpringCloud -- MQ高级
  • 关于获取某目录及子目录下所有文件且不包含隐藏文件
  • dify + mcp 实现图片 ocr 识别