巧用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制作简单的网页爬虫
Nov 22 Python
python轻松查到删除自己的微信好友
Jan 10 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
pycharm远程调试openstack的图文教程
Nov 21 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
mac下给python3安装requests库和scrapy库的实例
Jun 13 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
python tkinter库实现气泡屏保和锁屏
Jul 29 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 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/09/26 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
javascript 写类方式之十
2009/07/05 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
js实现批量删除功能
2020/08/27 Javascript
python3实现读取chrome浏览器cookie
2016/06/19 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
python框架中flask知识点总结
2018/08/17 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
PHP如何对用户密码进行加密
2014/07/31 面试题
新锐科技Java程序员面试题
2016/07/25 面试题
出生证明公证书
2014/04/09 职场文书
《月亮湾》教学反思
2014/04/14 职场文书
合作协议书
2014/04/23 职场文书
车间核算员岗位职责
2014/07/01 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
公司庆典欢迎词
2015/01/26 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书