Стек декораторов#
К функции может применяться несколько декораторов. Порядок применения декораторов будет зависеть от того в каком порядке они записаны:
def stars(func):
@wraps(func)
def wrapper(*args, **kwargs):
print('*'*30)
return func(*args, **kwargs)
return wrapper
def lines(func):
@wraps(func)
def wrapper(*args, **kwargs):
print('-'*30)
return func(*args, **kwargs)
return wrapper
def equals(func):
@wraps(func)
def wrapper(*args, **kwargs):
print('='*30)
return func(*args, **kwargs)
return wrapper
@stars
@lines
@equals
def func(a, b):
return a + b
In [23]: func(4,5)
******************************
------------------------------
==============================
Out[23]: 9
In [24]: def func(a, b):
...: return a + b
...: func = stars(lines(equals(func)))
In [30]: func(4,5)
******************************
------------------------------
==============================