python抽象类的新写法

记得之前learn python一书里面,因为当时没有官方支持,只能通过hack的方式实现抽象方法,具体如下 最简单的写法

class mycls():
def foo(self):
print(‘method no implement’)
运行的例子
>>> a = mycls()
>>> a.foo()
method no implement
>>>

这样虽然可以用,但是提示不明显,还是容易误用,当然,还有更好的方法 较为可以接受的写法

class mycls():
def foo(self):
raise exception(‘no implement exception’, ‘foo method need implement’)

一个简单的用例

>>> a = mycls()
>>> a.foo()
traceback (most recent call last):
file “”, line 1, in
file “”, line 3, in foo
exception: (‘no implement exception’, ‘foo method need implement’)

这就是2.7之前的写法了,2.7给了我们新的支持方法!abc模块(abstruct base class),这个在py3k中已经实现,算是back port吧。

我们来看看新的写法

from abc import abcmeta
from abc import abcmeta,abstractmethod
class foo():
__metaclass__ = abcmeta
@abstractmethod
def bar(self):
pass

运行效果

>>> class b(foo):
… def bar(self):
… pass

>>> b()

>>> b().bar()
>>> class c(foo):
… pass

>>> c().bar()
traceback (most recent call last):
file “”, line 1, in
typeerror: can’t instantiate abstract class c with abstract methods bar
>>>

Posted in 未分类

发表评论