巧用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脚本实现格式化css文件
Apr 08 Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
使用Template格式化Python字符串的方法
Jan 22 Python
python3下载抖音视频的完整代码
Jun 05 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
python @classmethod 的使用场合详解
Aug 23 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
python中列表的含义及用法
May 26 Python
python实例化对象的具体方法
Jun 17 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
linux下编译安装memcached服务
2014/08/03 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
php生成curl命令行的方法
2015/12/14 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
Python抓取京东图书评论数据
2014/08/31 Python
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
Python的迭代器和生成器
2015/07/29 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
Python正则表达式如何匹配中文
2020/05/27 Python
浅谈Python 参数与变量
2020/06/20 Python
python对execl 处理操作代码
2020/06/22 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
酒店值班经理的工作职责范本
2014/02/18 职场文书
继承权公证书
2014/04/09 职场文书
律政俏佳人观后感
2015/06/09 职场文书
高中数学教学反思范文
2016/02/18 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
Python包argparse模块常用方法
2021/06/04 Python