巧用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 的枚举 Enum
Jun 12 Python
利用aardio给python编写图形界面
Aug 21 Python
简单实现python收发邮件功能
Jan 05 Python
Python基于opencv的图像压缩算法实例分析
May 03 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
python学生管理系统学习笔记
Mar 19 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
django自带的权限管理Permission用法说明
May 13 Python
python爬取网易云音乐热歌榜实例代码
Aug 07 Python
用python获取txt文件中关键字的数量
Dec 24 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
SONY SRF-M100的电路分析
2021/03/02 无线电
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
php动态函数调用方法
2015/05/21 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
PHP asXML()函数讲解
2019/02/03 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
python中的sort方法使用详解
2014/07/25 Python
Python中标准模块importlib详解
2017/04/16 Python
python版飞机大战代码分享
2018/11/20 Python
python读取图片任意范围区域
2019/01/23 Python
原生python实现knn分类算法
2019/10/24 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
C++的几个面试题附答案
2016/08/03 面试题
delegate与普通函数的区别
2014/01/22 面试题
室内设计专业个人的自我评价
2013/10/19 职场文书
四议两公开实施方案
2014/03/28 职场文书
警校毕业生自我评价
2014/04/06 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
垂直极限观后感
2015/06/08 职场文书
借钱欠条怎么写
2015/07/03 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
html中两种获取标签内的值的方法
2022/06/16 jQuery