0%

python装饰器

装饰器,参考文档https://realpython.com/primer-on-python-decorators

Function函数

  • 函数也是object,可以作为参数传递
  • 函数内部还可以定义函数
  • 函数可以作为返回值,传递出去

简单Decorator

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def my_decorator(func):
def wrapper(): # 函数内部的函数
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper #函数作为返回值

def say_whee():
print("Whee!")

say_whee = my_decorator(say_whee) #函数作为参数

#python decorator语法糖写法
@my_decorator
def say_whee():
print("Whee!")

decorator包住一个函数,让函数增加新的功能。

原文中包含很多实际例子非常好,计时,调试,限速,注册插件。

类Decorator

@classmethod, @staticmethod, and @property都属于内置decorator。

decorator也可以嵌套

say_whee = my_decorator(say_whee)用decorator把原来的函数,添加功能后,变成了新的函数,只是名字还叫原来的函数。新函数是decorator的内置函数。decorator也是个函数。

python提供语法@decorator就可以实现decorator。

通过这样的python特性,可以实现不修改原来代码的情况下,修改功能。