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之模块的加载
Oct 24 Python
用Python的Django框架完成视频处理任务的教程
Apr 02 Python
django接入新浪微博OAuth的方法
Jun 29 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
Python 存取npy格式数据实例
Jul 01 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
Python基础之变量的相关知识总结
Jun 23 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__ 常量
2008/07/23 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
php支付宝APP支付功能
2020/07/29 PHP
拖动一个HTML元素
2006/12/22 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
JavaScript实现百度搜索框效果
2020/03/26 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
深入理解Python中装饰器的用法
2016/06/28 Python
浅谈对yield的初步理解
2017/05/29 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
2019/06/27 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
python中图像通道分离与合并实例
2020/01/17 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
捐助贫困学生倡议书
2014/05/16 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
2014年教研工作总结
2014/12/06 职场文书
学术会议领导致辞
2015/07/29 职场文书
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers