巧用Python装饰器 免去调用父类构造函数的麻烦


Posted in Python onMay 18, 2012

先看一段代码:

class T1(threading.Thread): 
def __init__(self, a, b, c): 
super(T1, self).__init__() 
self.a = a 
self.b = b 
self.c = c def run(self): 
print self.a, self.b, self.c

代码定义了一个继承自threading.Thread的class,看这句

super(T1, self).__init__()

也有些人喜欢这么写

threading.Thread.__init__(self)

当然作用都是调用父类的构造函数。

写了这么久的python代码,每次写到这都有重复造轮子的感觉。刚才突然想到装饰器这个好东西,试着写了个autoInitClass来帮助pythoner脱离苦海,免去手动调用父类构造函数的麻烦。
代码如下:

def autoInitClass(OldClass): 
superClass = OldClass.mro()[1] 
class NewClass(OldClass): 
def __init__(*args): 
self = args[0] 
superClass.__init__(self) 
apply(OldClass.__init__, args) 
return NewClass

使用autoInitClass装饰器构造新类:
@autoInitClass 
class T2(threading.Thread): 
def __init__(self, a, b, c): 
#不用再写super(T2, self).__init__() 
self.a = a 
self.b = b 
self.c = c def run(self): 
print self.a, self.b, self.c

本文来自: itianda's blog ,转载请注明原文出处
Python 相关文章推荐
Python常用时间操作总结【取得当前时间、时间函数、应用等】
May 11 Python
Django 跨域请求处理的示例代码
May 02 Python
python中字符串内置函数的用法总结
Sep 13 Python
对python 读取线的shp文件实例详解
Dec 22 Python
python实现彩色图转换成灰度图
Jan 15 Python
python celery分布式任务队列的使用详解
Jul 08 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
wxPython实现列表增删改查功能
Nov 19 Python
使用python实现画AR模型时序图
Nov 20 Python
python base64库给用户名或密码加密的流程
Jan 02 Python
Python自动发送和收取邮件的方法
Aug 12 Python
Django如何与Ajax交互
Apr 29 Python
Python使用Socket(Https)Post登录百度的实现代码
May 18 #Python
写了个监控nginx进程的Python脚本
May 10 #Python
400多行Python代码实现了一个FTP服务器
May 10 #Python
使用PYTHON接收多播数据的代码
Mar 01 #Python
使用PYTHON创建XML文档
Mar 01 #Python
基于python的汉字转GBK码实现代码
Feb 19 #Python
python 装饰器功能以及函数参数使用介绍
Jan 27 #Python
You might like
simplehtmldom Doc api帮助文档
2012/03/26 PHP
smarty实现多级分类的方法
2014/12/05 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
前端深入理解Typescript泛型概念
2020/03/09 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
pandas 小数位数 精度的处理方法
2018/06/09 Python
python实现感知器算法(批处理)
2019/01/18 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
高一生物教学反思
2014/01/17 职场文书
建筑工地标语
2014/06/18 职场文书
教师党员承诺书2015
2015/01/21 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
务工证明怎么写
2015/06/18 职场文书
2015年度女工工作总结
2015/10/22 职场文书
PHP中->和=>的意思
2021/03/31 PHP