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
的错误。
但总的来说,这个方式目的就是给用户一个创建抽象类的方式,可以说是一种启发吧,存在还是合理的(虽然软件里面很多时候存在不一定合理)。