python中raise NotImplementedError的使用

raise NotImplementedError的使用感觉很类似于C#中虚函数的效果,它的意思是如果这个方法没有被子类重写,但是调用了,就会报错。
错误的使用:
代码

class TestClassOne(object):

    def Test(self):
        raise NotImplementedError

class TestClassTwo(TestClassOne):

    def Test2(self):
        print 'hello world'

a = TestClassTwo()
a.Test()

执行效果
在这里插入图片描述

我仔细一想
这不是脱了裤子放屁吗? 在父类的方法里面直接抛出异常 子类不重写直接调用,使用的就是父类的方法, TMD肯定抛出异常啊,
这样来说,raise NotImplementedError的作用就是一个看报错方便推到而已,使用其他任何的异常没有问题

正确的使用

# coding=utf-8
class TestClassOne(object):
    def Test(self):
        raise NotImplementedError

class TestClassThree(TestClassOne):
    def Test(self):
        print 'hello world'

b = TestClassThree()
b.Test()

执行效果
在这里插入图片描述

总结一下,python中raise NotImplementedError的使用就是在放屁,而且是放了一个大臭屁,唯一的作用就是把这个异常内置进去,然后写父类方法的时候抛出这个异常,报错的时候比较容易看
但有一说一,这种实现谁都会,考虑如此精细,也别喷太狠吧

时隔一年又两个多月后,我收回我的说法

不能收收回吧,差不多是这个意思,总之就是说,现在感觉到这个方法是在python2中创建一个抽象类的方法, 虽然也有其他的方式,如下也可实现

import abc
class MyAbstractClass(object):
	
	@abc.abstractmethod
	def my_method(self):
		pass

虽然没看源码,也能感觉到这个decorator可定也就是判断了下子类有没有实现这个方法进行选择执行或者抛出NotImplementedError的错误。
但总的来说,这个方式目的就是给用户一个创建抽象类的方式,可以说是一种启发吧,存在还是合理的(虽然软件里面很多时候存在不一定合理)。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值