巧用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, 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装饰器 免去调用父类构造函数的麻烦。坚持每天提高1%,70天工作水平就可以提升一倍。更多关于巧用Python装饰器 免去调用父类构造函数的麻烦请关注haodaima.com其它相关文章!

标签: 巧用 Python