Python抽象类的新写法


Posted in Python onJune 18, 2015

记得之前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
>>>

Python 相关文章推荐
python结合opencv实现人脸检测与跟踪
Jun 08 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
Python做简单的字符串匹配详解
Mar 21 Python
Python Socket编程之多线程聊天室
Jul 28 Python
python3实现名片管理系统
Nov 29 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
numpy基础教程之np.linalg
Feb 12 Python
Python新手学习raise用法
Jun 03 Python
详解Python设计模式之策略模式
Jun 15 Python
Python如何给你的程序做性能测试
Jul 29 Python
python中使用asyncio实现异步IO实例分析
Feb 26 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 Python
Python实现的彩票机选器实例
Jun 17 #Python
Python基于Tkinter实现的记事本实例
Jun 17 #Python
Python基于Tkinter的HelloWorld入门实例
Jun 17 #Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 #Python
Python实现的使用telnet登陆聊天室实例
Jun 17 #Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 #Python
Python合并两个字典的常用方法与效率比较
Jun 17 #Python
You might like
php学习之function的用法
2012/07/14 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
Vue 组件封装 并使用 NPM 发布的教程
2018/09/30 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
python离线安装外部依赖包的实现
2020/02/13 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
Django 解决由save方法引发的错误
2020/05/21 Python
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
宝宝周岁宴答谢词
2014/01/26 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
初中学生操行评语
2014/12/26 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python