装饰器
这篇文章讲得比较全面 https://www.cnblogs.com/pythoncainiao/p/10120987.html
# 装饰器代码示例:
from functools import wraps
def wrapper(func):
@wraps(func)
def inner(*args, **kwargs):
'''在执行目标函数之前要执行的内容'''
ret = func(*args, **kwargs)
'''在执行目标函数之后要执行的内容'''
return ret
return inner
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 带参数的装饰器
就是在普通装饰器外面再加一层装饰器
def wrapper_out(flag):
def wrapper(func):
@wraps(func)
def inner(*args, **kwargs):
if flag == True:
print("flag=True")
ret = func(*args, **kwargs)
return ret
else:
print("flag=False")
ret = func(*args, **kwargs)
return ret
return inner
return wrapper
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 用于类函数的带参数的装饰器
https://blog.csdn.net/weixin_33711647/article/details/92549215
def wrapper_out(input_b):
def wrapper(func):
@wraps(func)
def inner(self, *args, **kwargs):
'''在执行目标函数之前要执行的内容'''
print('a+b=', self.self_a + input_b)
ret = func(self, *args, **kwargs)
'''在执行目标函数之后要执行的内容'''
return ret
return inner
return wrapper
class Test:
def __init__(self):
self.self_a = 2
@wrapper_out(3) # print: a+b=5
def do_something(self):
print('do something')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 用于类函数内的闭包函数的装饰器
class Test:
def __init__(self):
self.self_a = 2
def pack_wrapper(self, func):
@wraps(func)
def inner(*args, **kwargs): #注意self放到上面去了
if flag == True:
print("flag=True")
ret = func(*args, **kwargs)
return ret
else:
print("flag=False")
ret = func(*args, **kwargs)
return ret
return inner
@pack_wrapper(3) # print: a+b=5
def do_something(self):
print('do something')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
编辑 (opens new window)
上次更新: 2021/10/11, 12:43:58