-
def outer(func):
"""
自定义逻辑1
"""
def inner(*args,**kwargs):
"""
自定义逻辑2
"""
res = func(*args,**kwargs)
"""
自定义逻辑3
"""
return res
return inner -
装饰器装饰原理
-
多个装饰器执行顺序
当func有多个装饰器时,装饰器会按照从上到下的顺序对func进行装饰。
最上层装饰器装饰func并返回自己的inner方法,那么下一层的装饰器就会装饰上层装饰器的inner方法,并返回自己的inner方法,以此类推。
# 从下到上给装饰器编号1~n
func = outer_1(
outer_2(
outer_3(
...(
outer_n(func)
)
)
)
)
此时func就是最下层装饰器的inner方法。
所以当func被执行时,最先被执行的逻辑是最下层装饰器的"自定义逻辑2",然后是上一层装饰器的"自定义逻辑2",以此类推。
直到执行完原始的func之后,开始执行最上层装饰器的"自定义逻辑3",然后是下一层装饰器的"自定义逻辑3",以此类推。