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可变参数函数用法实例
Jul 07 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
python实现读取大文件并逐行写入另外一个文件
Apr 19 Python
python实现自动登录
Sep 17 Python
Python 最大概率法进行汉语切分的方法
Dec 14 Python
tensorflow自定义激活函数实例
Feb 04 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
查看已安装tensorflow版本的方法示例
Apr 19 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
Python数据分析入门之教你怎么搭建环境
May 13 Python
Python快速优雅的批量修改Word文档样式
May 20 Python
Python语言内置数据类型
Feb 24 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
图书管理程序(三)
2006/10/09 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
用js解决数字不能换行问题
2010/08/10 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
javascript关于继承解析
2016/05/10 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
python 美化输出信息的实例
2018/10/15 Python
python3实现名片管理系统
2020/11/29 Python
python实现海螺图片的方法示例
2019/05/12 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
Python几种常见算法汇总
2020/06/02 Python
Python定义一个函数的方法
2020/06/15 Python
python re模块常见用法例举
2021/03/01 Python
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
关于随地扔垃圾的检讨书
2014/09/30 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
2014年司法所工作总结
2014/11/22 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
2015年六一儿童节活动方案
2015/05/05 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
python的变量和简单数字类型详解
2021/09/15 Python
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技