【Python】进阶学习:一文了解NotImplementedError的作用

【Python】进阶学习:一文了解NotImplementedError的作用
在这里插入图片描述

🌈 个人主页:高斯小哥
🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)


🌵文章目录🌵

  • 🔍 一、初识NotImplementedError
  • 💡 二、NotImplementedError的作用
  • 💻 三、代码示例:使用NotImplementedError实现自定义接口
  • 🎉 四、总结

🔍 一、初识NotImplementedError

  在Python中,NotImplementedError是一个内置异常类,用于表示一个方法或函数应该被实现,但实际上并没有被实现。它通常用于抽象基类(ABC)中,作为占位符,提醒子类必须覆盖这个方法。通过了解NotImplementedError,我们可以更好地理解Python中的抽象编程和面向对象编程。

下面是一个简单的示例,展示如何在抽象基类中使用NotImplementedError

from abc import ABC, abstractmethodclass Shape(ABC):@abstractmethoddef area(self):raise NotImplementedError("子类必须实现这个方法")class Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self):return 3.14 * self.radius ** 2class Square(Shape):def __init__(self, side):self.side = sidedef area(self):return self.side ** 2# 正确使用
circle = Circle(5)
print(circle.area())  # 输出圆的面积square = Square(4)
print(square.area())  # 输出正方形的面积# 错误使用
shape = Shape()  # 这里会抛出TypeError,因为Shape是抽象基类,不能直接实例化
print(shape.area())  # 这行代码不会执行,因为上面已经抛出了异常

  在上面的代码中,Shape是一个抽象基类,它定义了一个抽象方法area,这个方法没有具体的实现,只是抛出了一个NotImplementedError异常。子类CircleSquare必须覆盖这个方法,并提供具体的实现。如果我们尝试直接实例化Shape类并调用其area方法,就会触发TypeError,因为抽象基类不能被直接实例化。

💡 二、NotImplementedError的作用

  NotImplementedError的主要作用是作为一种标记,表明某个方法或功能尚未实现。在Python的抽象基类机制中,它扮演着重要的角色。通过使用NotImplementedError,我们可以确保子类不会忘记实现必要的方法,从而提高代码的可维护性和健壮性。

  此外,NotImplementedError还可以用于操作符重载的场合。当我们为自定义类型定义特殊方法(如__add____eq__等)时,如果某个操作在当前上下文中没有意义或尚未实现,可以抛出NotImplementedError。这样,当其他代码尝试执行这个操作时,就会收到一个明确的错误提示,而不是一个意外的结果或行为。

💻 三、代码示例:使用NotImplementedError实现自定义接口

下面是一个使用NotImplementedError实现自定义接口的例子:

from abc import ABC, abstractmethodclass DataStore(ABC):@abstractmethoddef save_data(self, data):raise NotImplementedError("子类必须实现这个方法以保存数据")@abstractmethoddef load_data(self):raise NotImplementedError("子类必须实现这个方法以加载数据")class FileDataStore(DataStore):def __init__(self, filename):self.filename = filenamedef save_data(self, data):with open(self.filename, 'w') as file:file.write(data)def load_data(self):with open(self.filename, 'r') as file:return file.read()# 使用自定义接口
store = FileDataStore('data.txt')
store.save_data('Hello, world!')
data = store.load_data()
print(data)  # 输出: Hello, world!

  在上面的代码中,我们定义了一个DataStore抽象基类,它包含了两个抽象方法:save_dataload_data。这两个方法都抛出了NotImplementedError,表明子类必须提供具体的实现。然后我们创建了一个FileDataStore类,它继承了DataStore抽象基类,并提供了save_dataload_data方法的具体实现。这样,我们就创建了一个符合DataStore接口的自定义数据存储类,可以用于保存和加载数据。

🎉 四、总结

  本文主要介绍了Python中的NotImplementedError异常类。这种异常通常用于抽象基类中,作为子类必须实现的方法的占位符,以确保子类不会遗漏关键功能的实现。此外,它也用于标记尚未实现的操作或功能,为开发者提供明确的错误提示。通过具体代码示例,我们展示了如何在自定义接口中使用NotImplementedError来强制子类实现特定方法。总之,NotImplementedError是Python中一种强大的机制,有助于增强代码的可维护性和扩展性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/746416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hashtable、HashMap、TreeMap的区别

了解 Hashtable、HashMap、TreeMap 1)Hashtable 是一个比较古老的实现,随 Java 1.0 引入。 它是同步的,这意味着它是线程安全的,但这也意味着它通常比非同步的实现(如 HashMap )慢。 不允许使用 null 键…

x264编码器 API 函数介绍

x264 x264是一个开源的视频编码库,用于将视频压缩为H.264/AVC(Advanced Video Coding)格式。它是一种广泛使用的视频编码标准,能够提供高质量的视频压缩和较低的比特率。 x264库提供了一个编码器,可以将原始视频序列转换为H.264/AVC压缩的比特流。它实现了各种H.264编码算…

【从Python基础到深度学习】12. 封包、解包

封包 将多个值赋值给一个变量时,Python 会自动将这些值封装成元组,这个特性称之为封包 a 1, 2, 3, 4 print(a) 解包 所有可迭代对象都支持解包 str list tuple dict set reversed range zip enumerate 赋值过程中的解包赋值符号左边变量和右边可迭代…

MongoDB实战面试指南:常见问题一网打尽

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! MongoDB是一款流行的非关系型数据库,以其高效、可扩展的特性受到开发者的青睐。了解MongoDB的架构、存储引擎和数据结…

ETH共识升级之路

简介 根据我们之前的介绍,了解到ETH网络的共识方式,已经从 PoW 切换到了 PoS,今天我们就回顾下升级之路,以及升级带来的影响 最早的共识机制 PoW 以太坊创建之初采用了类似比特币的工作量证明机制,即矿工通过计算哈希函…

java房屋中介(java+SQL2000)-391-(源码+说明资料)

转载地址: http://www.3q2008.com/soft/search.asp?keyword391 任务及要求:  1.设计(研究)内容和要求(包括设计或研究内容、主要指标与技术参数,并根据课题性质对学生提出具体要求)  本系统…

知识图谱中的数据服务是什么?

随着信息时代的飞速发展,数据已经成为了各行各业的重要资源。知识图谱作为大数据时代的一种新型数据组织形式,能够将分散、无序的数据进行结构化处理,并建立起相互之间的关系,从而更好地满足人们对知识的需求。而在知识图谱中&…

CircuitBreaker熔断器

CircuitBreaker熔断器 1、Hystrix目前也进入维护模式 ​ Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下&…

C++演变历史

C 从 C 98 版本到今年确定的 C23,共经历了 6 个版本的迭代。上面这张图里,列出了每次版本更新变化的内容。顶部黑体字的大小说明了版本变化的大小,其中 C14 是字体最小,这个版本是 C11 的增量版本,之所以没有大的变动&…

Server-Sent Events (SSE) 实现从服务器到客户端的实时数据流

前期回顾 避免阻塞主线程 —— Web Worker 示例项目-CSDN博客https://blog.csdn.net/m0_57904695/article/details/136721297?spm1001.2014.3001.5501 目录 CSDN 彩色之外 📝 前言 🛠️ 安装 ✂️ 运行服务器 ✂️ 运行index.html ♻️ 贡献…

身份证查询-身份认证-javascript实名认证接口-

翔云身份证实名认证接口将与网络平台携手共筑信息安全防线,守护每一笔交易的真实可信,助力您的企业在数字化浪潮中稳健前行! 以下是javascript语言调用翔云身份证实名认证API的代码: var form new FormData(); form.append("…

引领短剧风尚,打造全新观影体验——短剧APP开发之旅

随着移动互联网的迅猛发展,短视频和短剧成为了大众休闲娱乐的新宠。为了满足用户对于高质量、快节奏内容的需求,我们决定开发一款全新的短剧APP,为用户带来前所未有的观影体验。 这款短剧APP将集合丰富多样的短剧资源,涵盖各种题…

了解什么是 Redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?

目录 一、面试官心理分析 二、面试题剖析 1. 缓存雪崩 2. 缓存穿透 3. 缓存击穿 一、面试官心理分析 其实这是问到缓存必问的,因为缓存雪崩和穿透,是缓存最大的两个问题,要么不出现,一旦出现就是致命性的问题&#x…

B/S基于云计算的云HIS智慧医院管理系统源码带电子病历编辑器

目录 一、系统概述 二、开发环境 三、系统功能 1、门诊部分 2、住院部分 3、电子病历 4、药物管理 5、统计报表 6、综合维护 7、运营运维 云HIS系统:病案首页 云his系统源码 SaaS应用 功能易扩 统一对外接口管理 现如今,大数据、云计算、移动…

c# 编辑、删除一条数据

1、编辑数据 [HttpPost] public MessageModel<string> Put([FromBody] Dtable request) { var data new MessageModel<string>(); request.UPDATETIME DateTime.Now; if (request.ID>0) { …

案例:MySQL 主从复制与读写分离

1.案例环境 一、准备五台主机 Master&#xff1a;操作系统CentOS 7.3x86_74、IP地址192.168.17.10。Slave1&#xff1a;操作系统CentOS 7.3x86_74、IP地址192.168.17.20。Slave2&#xff1a;操作系统CentOS 7.3x86_74、IP地址192.168.17.30。Amoeba&#xff1a;操作系统CentO…

HDOJ 2048

神、上帝以及老天爷 Problem Description HDU 2006’10 ACM contest的颁奖晚会隆重开始了&#xff01; 为了活跃气氛&#xff0c;组织者举行了一个别开生面、奖品丰厚的抽奖活动&#xff0c;这个活动的具体要求是这样的&#xff1a; 首先&#xff0c;所有参加晚会的人员都将一…

python | pop()和remove()方法

pop()与remove()方法都是删除列表中的元素&#xff0c;但删除的位置不同 ① pop()&#xff1a;删除列表中的最后一个元素 ② remove()&#xff1a;可以删除列表中的某一个值 如果某一个值有多个&#xff0c;则删除第一个&#xff08;即最左边出现的那一个&#xff09; li[…

【WPF】Canvas的Path画线 颜色值偏差和面积不准确

图像中左上角2个红色线段 颜色值有偏差&#xff0c;且线段高度不准确&#xff08;我设置的是Red,1&#xff09;。 解决方案&#xff1a; 1、PathGeometry PathFigure LineSegment 2、Stretch设置Fill <Path Stretch"Fill" Stroke"Red"…

Axure软件安装汉化教程

Axure软件安装汉化教程 一、准备教程 下载Axure的软件&#xff0c;并解压打开 二、安装过程 双击Axure软件的运行程序&#xff0c;修改安装程序的路径&#xff0c;默认下一步即可。 三、软件汉化 打开Axure的软件安装路径&#xff0c;将汉化包复制粘贴进入到Axure RP 9安装…