巧用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的Flask框架下使用sqlalchemy库的简单教程
Apr 09 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
python opencv实现图像边缘检测
Apr 29 Python
Python实现使用request模块下载图片demo示例
May 24 Python
Python中请不要再用re.compile了
Jun 30 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
详解Django CAS 解决方案
Oct 30 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
Python使用scapy模块发包收包
May 07 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
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
python脚本监控docker容器
2016/04/27 Python
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
python删除不需要的python文件方法
2018/04/24 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
北大研究生linux应用求职信
2013/10/29 职场文书
煤矿班组长的职责
2013/12/25 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
综合管理员岗位职责
2015/02/11 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL