Python使用偏函数与类实现装饰器

Python使用偏函数与类实现装饰器,第1张

概述  # -*- coding: utf-8 -*-# author:baoshan# python对某个对象是否能通过装饰器形式使用只有一个要求:decorator必须是一个可被调用的对象。# 我们最熟悉的就是函数了# 除函数之外,类也可以是callable对象,只要实现了__call__函数。# 如下DelayFunc是一个实现了__call__的类,delay返回一个偏

 

# -*- 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使用偏函数与类实现装饰器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1191781.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存