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


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

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


    🔍 一、初识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())  # 这行代码不会执行,因为上面已经抛出了异常
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

      在上面的代码中,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!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

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

    🎉 四、总结

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

  • 相关阅读:
    C语言进阶(十四) - 文件管理
    TSINGSEE青犀智慧广场智能监控解决方案,助力广场监控数字化转型
    GLIP & DetCLIP
    数据大屏React使用scale适配解决方案
    【React】手把手学习React - 元素渲染
    不知道有哪些可以语音转文字的软件?推荐你用这个
    web前端框架设计第六课-样式绑定
    【spark】spark使用sql读取elasticsearch es索引,使用keystore配置用户密码
    tkMapper单表查询_实际应用
    JavaScript 64 JavaScript 函数 64.2 JavaScript 函数参数
  • 原文地址:https://blog.csdn.net/qq_41813454/article/details/136735887