巧用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 迭代器与生成器实例详解
May 18 Python
Python机器学习之决策树算法
Dec 22 Python
用Python实现KNN分类算法
Dec 22 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
Flask模拟实现CSRF攻击的方法
Jul 24 Python
Python:type、object、class与内置类型实例
Dec 25 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
python实现学生成绩测评系统
Jun 22 Python
Python pip使用超时问题解决方案
Aug 03 Python
python中pyqtgraph知识点总结
Jan 26 Python
使用tensorflow 实现反向传播求导
May 26 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 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 开源AJAX框架14种
2009/08/24 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
寻找网站后台地址的python脚本
2014/09/01 Python
python 性能优化方法小结
2017/03/31 Python
Django项目开发中cookies和session的常用操作分析
2018/07/03 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
keras实现多种分类网络的方式
2020/06/11 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
优秀团员事迹材料
2014/12/25 职场文书
资金申请报告范文
2015/05/14 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python