微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

巧用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 ,转载请注明原文出处

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐