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 >>>
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下