Python抽象类的新写法
Jun 06, 2016 am 11:18 AM
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 "<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>", line 1, in <module> TypeError: Can't instantiate abstract class C with abstract methods bar >>>
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Google AI 为开发者发布 Gemini 1.5 Pro 和 Gemma 2

仅用250美元,Hugging Face技术主管手把手教你微调Llama 3
