巧用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多进程操作实例
Nov 21 Python
详解Python发送邮件实例
Jan 10 Python
python装饰器与递归算法详解
Feb 18 Python
对python的输出和输出格式详解
Dec 08 Python
对python:print打印时加u的含义详解
Dec 15 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
python对Excel的读取的示例代码
Feb 14 Python
使用python绘制分组对比柱状图
Apr 21 Python
python如何查找列表中元素的位置
May 30 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多维数组指定多字段排序的示例代码
2018/05/16 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
[JS]点出统计器
2020/10/11 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
详解在React里使用"Vuex"
2018/04/02 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
Python库urllib与urllib2主要区别分析
2014/07/13 Python
Python open()文件处理使用介绍
2014/11/30 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
opencv python图像梯度实例详解
2020/02/04 Python
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
读书月活动方案
2014/05/22 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python