加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 19:40:55 所属栏目: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,看这

先看一段代码:

复制代码 代码如下:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读