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 psutil模块简单使用实例
Apr 28 Python
python使用xlrd与xlwt对excel的读写和格式设定
Jan 21 Python
详解python调度框架APScheduler使用
Mar 28 Python
Python操作json的方法实例分析
Dec 06 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
Python对象与引用的介绍
Jan 24 Python
python实现抠图给证件照换背景源码
Aug 20 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
Oct 23 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
信号生成及DFT的python实现方式
Feb 25 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 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
人族 TERRAN 概述
2020/03/14 星际争霸
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
jquery图片切换插件
2015/03/16 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
vue组件name的作用小结
2018/05/23 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
基于并发服务器几种实现方法(总结)
2017/12/29 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
对pandas中to_dict的用法详解
2018/06/05 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
2019/08/13 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
家长给学校的建议书
2014/05/15 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
护士辞职信怎么写
2015/02/27 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
基于Redission的分布式锁实战
2022/08/14 Redis