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获取局域网占带宽最大3个ip的方法
Jul 09 Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 Python
Python程序中设置HTTP代理
Nov 06 Python
Python基于Matplotlib库简单绘制折线图的方法示例
Aug 14 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
Python单元测试简单示例
Jul 03 Python
python实现大转盘抽奖效果
Jan 22 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
keras分类之二分类实例(Cat and dog)
Jul 09 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
一个SQL管理员的web接口
2006/10/09 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
灵泰克Java笔试题
2016/01/09 面试题
银行进社区活动总结
2014/07/07 职场文书
科技工作者先进事迹
2014/08/16 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python