
# -*- Coding: utf-8 -*-# author:baoshan# python对某个对象是否能通过装饰器形式使用只有一个要求:decorator必须是一个可被调用的对象。# 我们最熟悉的就是函数了# 除函数之外,类也可以是callable对象,只要实现了__call__函数。# 如下DelayFunc是一个实现了__call__的类,delay返回一个偏函数,在这里delay就可以作为一个装饰器import timeimport functoolsclass 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 + bprint(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
谢谢!
总结以上是内存溢出为你收集整理的Python使用偏函数与类实现装饰器全部内容,希望文章能够帮你解决Python使用偏函数与类实现装饰器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)