巧用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 thread 并发且顺序运行示例
Apr 09 Python
python切换hosts文件代码示例
Dec 31 Python
python3实现暴力穷举博客园密码
Jun 19 Python
解决python3 网络请求路径包含中文的问题
May 10 Python
Flask框架各种常见装饰器示例
Jul 17 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
python保存字典和读取字典的实例代码
Jul 07 Python
python3 下载网络图片代码实例
Aug 27 Python
python对验证码降噪的实现示例代码
Nov 12 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 Python
解决python对齐错误的方法
Jul 16 Python
使用Python爬取小姐姐图片(beautifulsoup法)
Feb 11 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
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
怎么使 Mysql 数据同步
2006/10/09 PHP
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
php SQL Injection with MySQL
2011/02/27 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
Javascript中的数学函数
2007/04/04 Javascript
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
跟老齐学Python之用Python计算
2014/09/12 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
python字符串中的单双引
2017/02/16 Python
django 创建过滤器的实例详解
2017/08/14 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
农民入党思想汇报
2014/01/03 职场文书
公积金转移接收函
2014/01/11 职场文书
消防器材管理制度
2014/01/28 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
环卫工作汇报材料
2014/10/28 职场文书