巧用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通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
python使用xlrd与xlwt对excel的读写和格式设定
Jan 21 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
python实现决策树分类算法
Dec 21 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 Python
PyTorch中的padding(边缘填充)操作方式
Jan 03 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
python/golang 删除链表中的元素
Sep 14 Python
Django如何实现防止XSS攻击
Oct 13 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
玛琪朵 Macchiato
2021/03/03 咖啡文化
程序员编程十条戒律
2009/07/09 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
javascript 有用的脚本函数
2009/05/07 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
python关键字and和or用法实例
2015/05/28 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
保洁公司服务承诺书
2014/05/28 职场文书
工程安全生产协议书
2014/11/21 职场文书
2014年优秀党员材料
2014/12/18 职场文书
八月迷情观后感
2015/06/11 职场文书
公司人力资源管理制度
2015/08/05 职场文书
导游词之河北野三坡
2019/12/11 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
python通过函数名调用函数的几种方法总结
2021/06/07 Python
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery