巧用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 相关文章推荐
将图片文件嵌入到wxpython代码中的实现方法
Aug 11 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
Python txt文件加入字典并查询的方法
Jan 15 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
numpy中的meshgrid函数的使用
Jul 31 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
python中栈的原理及实现方法示例
Nov 27 Python
Django 路由层URLconf的实现
Dec 30 Python
Python接口测试get请求过程详解
Feb 28 Python
python3.4中清屏的处理方法
Jul 06 Python
通过实例解析Python RPC实现原理及方法
Jul 07 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
再次研究下cache_lite
2007/02/14 PHP
php在线代理转向代码
2012/05/05 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
PHP 实现重载
2021/03/09 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
python爬虫常用的模块分析
2014/08/29 Python
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
Python模拟三级菜单效果
2017/09/11 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
浅谈python中get pass用法
2019/03/19 Python
python实现处理mysql结果输出方式
2020/04/09 Python
django 模型中的计算字段实例
2020/05/19 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
生物技术毕业生自荐信
2013/10/23 职场文书
简历的自我评价
2014/02/03 职场文书
教师远程培训感言
2014/03/06 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
销售人员管理制度
2015/08/06 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书