二十一、深入Python强大的装饰器( 二 )
类装饰器类装饰器主要依赖函数__call__, 因此我们主要重写__call__即可 。
每当调用一个类的实例 , 函数__call__就会执行一次 。
下面 , 我们来看一个例子 。
class Count:def __init__(self, func):self.func = funcself.num_calls = 0def __call__(self, *args, **kwargs):self.num_calls += 1print('num of calls is: {}'.format(self.num_calls))return self.func(*args, **kwargs)@Countdef example():print("hello world")example()# 输出num of calls is: 1hello worldexample()# 输出num of calls is: 2hello world
嵌套装饰器我们可以把多个装饰器叠加在同一个函数上 , 这个就叫做嵌套装饰 。
嵌套装饰器的顺序是从下到上 ,
【二十一、深入Python强大的装饰器】@f2@f1def greet(name):print(f"Hello {name}")
所以上面的例子就是等价于:greet = f2(f1(greet))
那么相当于 , 从里到外 。
import functoolsdef my_decorator1(func):@functools.wraps(func)def wrapper(*args, **kwargs):print('execute decorator1')func(*args, **kwargs)return wrapperdef my_decorator2(func):@functools.wraps(func)def wrapper(*args, **kwargs):print('execute decorator2')func(*args, **kwargs)return wrapper@my_decorator1@my_decorator2def greet(message):print(message)greet('hello world')#相当于my_decorator1(my_decorator2(greet('hello world')))# 输出execute decorator1execute decorator2hello world
看完这篇文章还不理解装饰器 , 只有一种可能 , 说明我写的还不够清晰 , 那点赞鼓励鼓励我吧 。
今天也学到了很多东西呢 , 明天有什么新知识呢?真期待鸭~如果喜欢文章可以关注我哦~
?
本文已收录 GitHub , 传送门~[1], 里面更有大厂面试完整考点 , 欢迎 Star 。
?
Reference[1]
传送门~:
- 空调|让格力、海尔都担忧,中国取暖“新潮物”强势来袭,空调将成闲置品?
- 占营收|华为值多少钱
- 俄罗斯手机市场|被三星、小米击败,华为手机在俄罗斯排名跌至第三!
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 操盘|中兴统一操盘中兴、努比亚、红魔三大品牌
- 印度|拒绝华为后,印度、英国斥资数十亿求助日本
- 华为|台积电、高通、华为、小米接连宣布!美科技界炸锅:怎么会这样!
- 拍照|iPhone12还没捂热13就曝光了,屏幕、信号、拍照均有升级!
- 路由器|家里无线网经常断网、网速慢怎么办?教你几个小窍门,轻松解决
- 一图看懂!数字日照、新型智慧城市这样建(上篇)|政策解读 | 新型