使⽤类来写装饰器
前两天发现了装饰器可以直接使⽤类来写,分享⼀下,需要⽤类⾥⾯的__call__⽅法,__call__⽅法就是可以把这个实例当成⼀个函数来调⽤,如果正常使⽤类⾥⾯的⽅法的话,实例⽅法要先实例化类,然后才能调⽤,静态⽅法、类⽅法则需要⽤类名或者实例化之后的对象来调⽤,⽽实例化之后的这个对象,是不能被调⽤的,__call__⽅法就是把这个实例变成⼀个可以调⽤的对象,也就是说实例化之后,这个对象就可以和⼀个普通函数⼀样被调⽤。
⽰例代码如下:
1 2 3 4 5 6 7 8 9class Foo:
def __call__(self, *args, **kwargs):        print('')
def test(self):#
print('')
if __name__ == '__main__':
t = Foo()#实例化类
t()#直接调⽤实例化之后的对象
运⾏结果:
1 2>>& #这个是调⽤test⽅法的时候输出的
>>&#这个是执⾏调⽤这个实例化之后的⽅法输出的
理解了上⾯的之后,就可以使⽤class来写⼀个装饰器了,计算程序的运⾏时间,当然思想和以前⽤函数写装饰器是⼀样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17class Fuck(object):
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
import time
start_time = time.time()
res = self.func(*args, **kwargs)
end_time = time.time()
print('the function "%s" run time is %s' % (self.func.__name__,                                                    (end_time - start_time)))
return res
@Fuck
def run(name):
import time
实例化类和实例化对象time.sleep(1)
return 'sb_%s' % name
print(run('hyf'))
运⾏结果:
1 2>>>the function "run" run time is 1.0001001358032227#这个是装饰器帮我们计算的函数运⾏时间>>>sb_hyf#这个是正常运⾏run函数的时候,返回的值

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。