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实现的二叉树算法和kmp算法实例
Apr 25 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
详解Python中的文件操作
Aug 28 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
Anaconda2 5.2.0安装使用图文教程
Sep 19 Python
python基础梳理(一)(推荐)
Apr 06 Python
为什么称python为胶水语言
Jun 16 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
python数字类型和占位符详情
Mar 13 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实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
php对数组排序的简单实例
2013/12/25 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
PHP 实现缩略图
2021/03/09 PHP
基于jQuery的倒计时插件代码
2011/05/07 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
浅析Python基础-流程控制
2016/03/18 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
先进工作者推荐材料
2014/12/23 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技