巧用Python装饰器 免去调用父类构造函数的麻烦

先看一段代码


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,c):
#不用再写super(T2,self.c

本文来自: itianda's blog ,转载请注明原文出处

相关文章

方案一 代码 在Python中,可以使用wave模块来读取双通道(立...
简介 一个用python实现的科学计算,包括: 1、一个强大的N维...
使用爬虫利器 Playwright,轻松爬取抖查查数据 我们先分析登...
轻松爬取灰豚数据的抖音商品数据 调用两次登录接口实现模拟登...
成功绕过阿里无痕验证码,一键爬取飞瓜数据 飞瓜数据的登录接...
一文教你从零开始入门蝉妈妈数据爬取,成功逆向破解数据加密...