Python编程中NotImplementedError的使用

 

       Python编程中raise可以实现报出错误的功能,而报错的条件可以由程序员自己去定制。在面向对象编程中,可以先预留一个方法接口不实现,在其子类中实现。如果要求其子类一定要实现,不实现的时候会导致问题,那么采用raise的方式就很好。而此时产生的问题分类是NotImplementedError。

       写一段代码如下:

class ClassDemo:

       def test_demo(self):

                     raiseNotImplementedError("my test: not implemented!")

 

classChildClass(ClassDemo):

       pass

 

inst =ChildClass()

inst.test_demo()

       程序运行结果:

E:\01_workspace\02_programme_language\03_python\OOP\2017\08\10>pythonerror_demo.py

Traceback (mostrecent call last):

  File "error_demo.py", line 9, in<module>

    inst.test_demo()

  File "error_demo.py", line 3, intest_demo

    raise NotImplementedError("my test:not implemented!")

NotImplementedError:my test: not implemented!

       从上面的运行结果可以看出,程序识别到了这个方法并没有在子类中实现却被调用了。从代码报错的行数来看,只有这个子类的实例化对象调用相应的方法的时候才会报错。这样的推测结论也很容易通过代码修改测试得到验证,此处不再验证。

       进一步修改代码:

class ClassDemo:

       def test_demo(self):

                     raiseNotImplementedError("my test: not implemented!")

 

classChildClass(ClassDemo):

       def test_demo(self):

              print("OKOKOOK!")

 

inst =ChildClass()

inst.test_demo()

       在新的代码中,子类中实现了对test_demo方法的设计。程序的运行结果如下:

E:\01_workspace\02_programme_language\03_python\OOP\2017\08\10>pythonerror_demo.py

OKOKOOK!

       从程序的执行结果可以看出,只要相应的方法接口进行了实现,在执行的时候未实施的错误便不会报出。

### 回答1: 在面向接口编程,一个接口是一组相关的方法声明的集合,这些方法不包含任何实现。接口可以被类实现,这意味着类必须实现接口声明的所有方法。这样,接口就可以用来约束类的行为。 在 Python ,接口是通过继承自特殊的基类来实现的。举个例子,我们可以定义一个接口来约束具有特定行为的类: ```python class MyInterface: def do_something(self): raise NotImplementedError class MyClass(MyInterface): def do_something(self): print("Doing something") ``` 在这个例子,`MyInterface` 类声明了一个名为 `do_something` 的方法,但没有提供任何实现。`MyClass` 类则继承了 `MyInterface` 类,并在 `do_something` 方法提供了实现。这样,我们就可以确保 `MyClass` 具有接口声明的行为。 需要注意的是,Python 不支持纯粹的接口(即不包含任何方法的接口),因此在定义接口时必须包含至少一个方法。此外,Python 的接口不像其他语言的接口那样严格,因此在 Python 实现接口并不是强制性的。然而,使用接口是一种良好的编程习惯,可以帮助你组织代码并确保类 ### 回答2: 面向接口编程Python语言一种重要的编程模式。它的核心思想是通过接口(即一组规范),来定义一个软件组件应该具备的行为和功能。它让编程代码更加灵活且易于维护。 在Python,我们可以使用抽象基类(Abstract Base Classes,简称ABCs)来定义接口。抽象基类本身是不能实例化的,但可以通过继承来实现子类,从而实现对接口的定义和约束。 通过面向接口编程,我们可以将代码按照功能模块进行划分,每个模块都有相应的接口来定义其功能,然后由不同的类来实现这些接口。这样一来,不同的模块之间可以通过接口来进行交互,实现了模块的解耦和复用。 面向接口编程还可以让我们更加方便地进行单元测试。由于接口定义了一个组件的行为和契约,我们可以用一个模拟实现来替代真正的实现,以进行测试。这样可以更好地控制测试环境,从而提高代码的可靠性和稳定性。 总结来说,面向接口编程Python一种重要的编程范式,通过接口来定义组件的行为和功能,实现了代码的模块化、解耦和复用,提高了代码的可靠性和可维护性。它是Python编程的一项关键技术,值得我们深入学习和应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值