Python使用偏函数与类实现装饰器
发布时间:2020-12-20 10:56:16 所属栏目:Python 来源:网络整理
导读:? # -*- coding: utf-8 -*- # author:baoshan # python对某个对象是否能通过装饰器形式使用只有一个要求:decorator必须是一个可被调用的对象。 # 我们最熟悉的就是函数了 # 除函数之外,类也可以是callable对象,只要实现了__call__函数。 # 如下DelayFunc
? # -*- coding: utf-8 -*- # author:baoshan # python对某个对象是否能通过装饰器形式使用只有一个要求:decorator必须是一个可被调用的对象。 # 我们最熟悉的就是函数了 # 除函数之外,类也可以是callable对象,只要实现了__call__函数。 # 如下DelayFunc是一个实现了__call__的类,delay返回一个偏函数,在这里delay就可以作为一个装饰器 import time import functools class DelayFunc: def __init__(self,duration,func): self.duration = duration self.func = func def __call__(self,*args,**kwargs): print(‘Wait for {duration} seconds...‘.format(duration=self.duration)) time.sleep(self.duration) return self.func(*args,**kwargs) def eager_call(self,**kwargs): print(‘Call without delay‘) return self.func(*args,**kwargs) def delay(duration): """ 装饰器:推迟某个函数的执行。 同时提供 .eager_call方法立即执行 """ # 此处为了避免定义额外函数,直接调用functools.partial帮助构造 return functools.partial(DelayFunc,duration) @delay(duration=2) def add(a,b): return a + b print(add) print(‘-‘*20) print(add(3,5)) print(‘-‘*20) print(add.func) ? 输出结果: <__main__.DelayFunc object at 0x0000029A5B61DA58> -------------------- Wait for 2 seconds... 8 -------------------- <function add at 0x0000029A627FDD08> ? 参考自:https://zhuanlan.zhihu.com/p/65968462 ? 谢谢! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |