Python抽象类的新写法
记得之前learnpython一书里面,因为当时没有官方支持,只能通过hack的方式实现抽象方法,具体如下最简单的写法
classMyCls():
deffoo(self):
print('methodnoimplement')
运行的例子
>>>a=MyCls()
>>>a.foo()
methodnoimplement
>>>
这样虽然可以用,但是提示不明显,还是容易误用,当然,还有更好的方法较为可以接受的写法
classMyCls():
deffoo(self):
raiseException('noimplementexception','foomethodneedimplement')
一个简单的用例
>>>a=MyCls()
>>>a.foo()
Traceback(mostrecentcalllast):
File"<interactiveinput>",line1,in<module>
File"<clipboard>",line3,infoo
Exception:('noimplementexception','foomethodneedimplement')
这就是2.7之前的写法了,2.7给了我们新的支持方法!abc模块(abstructbaseclass),这个在py3k中已经实现,算是backport吧。
我们来看看新的写法
fromabcimportABCMeta fromabcimportABCMeta,abstractmethod classFoo(): __metaclass__=ABCMeta @abstractmethod defbar(self): pass
运行效果
>>>classB(Foo): ...defbar(self): ...pass ... >>>B() <__main__.Bobjectat0x02EE7B50> >>>B().bar() >>>classC(Foo): ...pass ... >>>C().bar() Traceback(mostrecentcalllast): File"<interactiveinput>",line1,in<module> TypeError:Can'tinstantiateabstractclassCwithabstractmethodsbar >>>
热门推荐
10 祝孙辈生日祝福语简短
11 恋人跨年祝福语大全简短
12 考大学敬酒简短祝福语
13 开工投产大吉祝福语 简短
14 偶然结婚祝福语朋友简短
15 感谢学长学姐祝福语简短
16 戏精的祝福语简短
17 我要结婚祝福语简短
18 婚前女儿生日祝福语简短