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

news2025/1/18 20:09:23

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

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


🌵文章目录🌵

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

🔍 一、初识NotImplementedError

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

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

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        raise NotImplementedError("子类必须实现这个方法")

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    
    def area(self):
        return 3.14 * self.radius ** 2

class Square(Shape):
    def __init__(self, side):
        self.side = side
    
    def 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, abstractmethod

class DataStore(ABC):
    @abstractmethod
    def save_data(self, data):
        raise NotImplementedError("子类必须实现这个方法以保存数据")
    
    @abstractmethod
    def load_data(self):
        raise NotImplementedError("子类必须实现这个方法以加载数据")

class FileDataStore(DataStore):
    def __init__(self, filename):
        self.filename = filename
    
    def 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.coloradmin.cn/o/1518697.html

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

相关文章

ios开发错误积累

1.xcode 下载模拟器报错 Could not download iOS 报错: 解决: 1、去官网下载自己需要 地址(https://developer.apple.com/download/all) 2、下载完成后,执行以下命令添加:xcrun simctl runtime add /路径…

桌面备忘录,电脑桌面备忘录怎么设置

在当今快节奏的生活中,备忘录成为了人们工作和生活中不可或缺的工具。然而,随着科技的发展,纸质备忘录逐渐被电子桌面备忘录所取代。在电脑桌面设置备忘录,可以更加高效地管理任务和提醒事项。 电脑桌面是我们日常工作和娱乐的主…

Dense Distinct Query for End-to-End Object Detection

摘要 对象检测中的一对一标签分配成功地消除了作为后处理的非极大值抑制( NMS )的需要,并使流水线端到端。然而,这引发了一个新的困境,因为广泛使用的稀疏查询无法保证高召回率,而密集查询不可避免地带来更…

论文篇00-【历年论文真题考点汇总】与【历年论文原题2009~2023年文字版记录】(2024年软考高级系统架构设计师冲刺知识点总结-论文篇-先导篇)

专栏系列文章推荐: 案例分析篇00-【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】 综合知识篇00-综合知识考点汇总目录 ...... 历年真题论文题考点汇总 历年软考系统架构设计师论文原题(2009-2022年) 因最新的2023年目前仅能搜索到回忆版,等楼主搜集到…

内容检索(2024.03.15)

随着创作数量的增加,博客文章所涉及的内容越来越庞杂,为了更为方便地阅读,后续更新发布的文章将陆续在此汇总并附上原文链接,感兴趣的小伙伴们可持续关注文章发布动态! 本期更新内容: 1. 信号完整性理论与…

找机厅 洛谷 BFS

P10234 [yLCPC2024] B. 找机厅 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> #define pii pair<int,int> #define fr first #define sc second using namespace std; string maze[2000]; int vis[2000][2000]; char dirs[2005][2005]; st…

数据和类型转换

文章目录 数据类型数字类型数字操作NaNJavaScript算术运算符的执行顺序 字符串类型&#xff08;string&#xff09;字符串拼接模板字符串 未定义类型&#xff08;undefined&#xff09;布尔类型&#xff08;boolean&#xff09;null&#xff08;空类型&#xff09; 类型转换显式…

Ubuntu上搭建TFTP服务

Ubuntu上搭建TFTP服务 TFTP服务简介搭建TFTP服务安装TFTP服务修改配置文件 重启服务 TFTP服务简介 TFTP是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议&#xff0c;适用于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而设计&#xff0c;只…

Java中 常见的开源树库介绍

阅读本文之前请参阅------Java中 树的基础知识介绍 在 Java 中&#xff0c;有几种流行的开源树库&#xff0c;它们提供了丰富的树算法和高级操作&#xff0c;可以帮助开发者更高效地处理树相关的问题。以下是几种常见的 Java 树库及其特点和区别&#xff1a; JTree 特点…

移动硬盘无法读取怎么修复?教你四招快速解决!

随着科技的发展&#xff0c;移动硬盘已经成为我们日常生活和工作中不可或缺的数据存储设备。然而&#xff0c;有时候我们可能会遇到移动硬盘无法读取的问题&#xff0c;这不仅会给我们带来数据丢失的风险&#xff0c;还可能影响我们的工作进度。下面给大家分享四种针对移动硬盘…

Qt教程 — 3.1 深入了解Qt 控件:Buttons按钮

目录 1 Buttons按钮简介 1.1 Buttons按钮简介 1.2 Buttons按钮如何选择 2 如何使用Buttons按钮 2.1 QPushButton使用-如何自定义皮肤 2.2 QToolButton使用-如何设置帮助文档 2.3 QRadioButton使用-如何设置开关效果 2.4 QRadioButton使用-如何设置三态选择框 2.5 QCom…

【C++初阶】C++入门(上)

C的认识 ①什么是C&#xff1f; ​ C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。 ​ 于是1982年&#xff0c;Bjarne Stroustrup&#xff08;本…

虚拟游戏理财 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 在一款虚拟游戏中生活&#xff0c;你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。 现有一家Bank&#xff0c;它提供有若干理财产品m&#xff0c;风险及…

AIGC笔记--关节点6D位姿按比例融合

1--核心代码 6D位姿一般指平移向量和旋转向量&#xff0c;Maya软件中关节点的6D位姿指的是相对平移向量和欧拉旋转向量&#xff1b; 为了按比例融合两个Pose&#xff0c;首先需要将欧拉旋转向量转换为旋转矩阵&#xff0c;在将旋转矩阵转换为四元数&#xff0c;利用球面线性插值…

vcomp120.dll无法继续执行代码怎么解决

如何解决“缺失vcomp120.dll”错误&#xff1f;vcomp120.dll下载去哪下呢&#xff1f;当您尝试启动一个应用程序或游戏时&#xff0c;您可能会看到一个错误消息&#xff0c;显示“缺失vcomp120.dll”。这通常是因为vcomp120.dll未正确安装或文件已丢失或损坏。这篇文章将向您介…

C语言深入理解指针(2)

1.数组名的理解 #include <stdio.h> int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p &arr[0];//&arr[0]将数组首元素的地址放在p这个指针变量}int main() {int arr[10] {0};int* p1 &arr[0];int* p2 arr;//数组名是数组首元素的地址return …

为何虎茅掌柜 短短6个月会员近百万 月销售额破亿!

大家好 我是吴军 一家软件开发公司的产品经理 今天我们来分析一下&#xff0c;一个卖酒的模式 为什么这家平台短短6个月&#xff0c;发展百万名用户&#xff0c;月销售额破亿! 虎茅掌柜&#xff0c;切记这个虎茅和茅台的那个没有任何关系 虎茅掌柜 虎茅掌柜实质上是一种…

vue生命周期函数原理解析,vue阻止事件冒泡方法实现

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

如何实现固定公网地址远程SSH连接Linux Deepin系统

文章目录 前言1. 开启SSH服务2. Deppin安装Cpolar3. 配置ssh公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 前言 Deepin操作系统是一个基于Debian的Linux操作系统&#xff0c;专注于使用者对日常办公、学习、生活和娱乐的操作体验的极致&#xff0…

网络通信与IO多路复用

网络通信与IO多路复用 一、网络通信1.缓存1.1 网卡缓存1.2 内核缓存1.3 用户缓存 2.发送过程3.接收过程 二、IO通信模型1.阻塞IO2.非阻塞IO3.IO多路复用4.信号驱动IO5.异步IO 三、IO多路复用1.select机制1.1 底层原理1.2 底层机制1.3 优点1.4 缺点 2.poll机制2.1 底层原理2.2 底…