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使用xmlrpc实例讲解
Dec 17 Python
python文件操作整理汇总
Oct 21 Python
Python的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
Python制作爬虫采集小说
Oct 25 Python
Python网络爬虫实例讲解
Apr 28 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
pip 安装库比较慢的解决方法(国内镜像)
Oct 06 Python
使用python实现kNN分类算法
Oct 16 Python
python画图常规设置方式
Mar 05 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
vscode+PyQt5安装详解步骤
Aug 12 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 flock 文件锁详细介绍
2012/12/29 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
2019/05/07 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Python的Flask开发框架简单上手笔记
2015/11/16 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
耐克美国官网:Nike.com
2016/08/01 全球购物
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
护士试用期自我鉴定
2014/02/08 职场文书
工会趣味活动方案
2014/08/18 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
员工培训协议书
2014/09/15 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
城南旧事读书笔记
2015/06/29 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis