Python抽象类的新写法
发布时间:2020-12-16 22:43:14 所属栏目:Python 来源:网络整理
导读:记得之前learn python一书里面,因为当时没有官方支持,只能通过hack的方式实现抽象方法,具体如下 最简单的写法 class MyCls(): def foo(self): print('method no implement')运行的例子 a = MyCls() a.foo()method no implement 这样虽然可以用,但是提示
记得之前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 "<interactive input>",line 1,in <module> File "<clipboard>",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() <__main__.B object at 0x02EE7B50> >>> B().bar() >>> class C(Foo): ... pass ... >>> C().bar() Traceback (most recent call last): File "<interactive input>",in <module> TypeError: Can't instantiate abstract class C with abstract methods bar >>>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |