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 相关文章推荐
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
python处理按钮消息的实例详解
Jul 11 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
python 筛选数据集中列中value长度大于20的数据集方法
Jun 14 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 Python
Python hashlib常见摘要算法详解
Jan 13 Python
Python使用Socket实现简单聊天程序
Feb 28 Python
Python如何测试stdout输出
Aug 10 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
python 管理系统实现mysql交互的示例代码
Dec 06 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获取远程图片体积大小的实例
2013/11/12 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
jquery获取复选框被选中的值
2014/03/22 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
Python之web模板应用
2017/12/26 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
对Python中画图时候的线类型详解
2019/07/07 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
美德好少年主要事迹
2014/01/29 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
教室布置标语
2014/06/26 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
关于做家务的心得体会
2016/01/23 职场文书
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript