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 相关文章推荐
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
Python装饰器基础概念与用法详解
Dec 22 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
python使用opencv对图像mask处理的方法
Jul 05 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
python实现PCA降维的示例详解
Feb 24 Python
pytorch之Resize()函数具体使用详解
Feb 27 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
Python3实现建造者模式的示例代码
Jun 28 Python
python实现简单文件读写函数
Feb 25 Python
pandas中DataFrame重置索引的几种方法
May 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
php Imagick获取图片RGB颜色值
2014/07/28 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
Python不规范的日期字符串处理类
2014/06/10 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
Python文件的读写和异常代码示例
2017/10/31 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
python计算n的阶乘的方法代码
2019/10/25 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
python 装饰器重要在哪
2021/02/14 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
精伦电子Java笔试题
2013/01/16 面试题
JAVA代码查错题
2014/10/10 面试题
应届大学生自荐信
2013/12/05 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
一年级学生评语
2014/04/23 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
《三国志》赏析
2019/08/27 职场文书
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
关于python中模块和重载的问题
2021/11/02 Python
实现一个简单得数据响应系统
2021/11/11 Javascript
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js