Ještě by bylo dobré doplnit, když už se nakouslo vytváření decoratorů, že by se měli vytvářet s @wraps jinak nemají funkce s decoratorem některé své atributy ( __name__ __doc__ __annotations__) ale logicky atributy decoratoru.
from functools import wraps
def my_decorator(f):
@wraps(f)
def wrapper(*args, **kwds):
print('Calling decorated function')
return f(*args, **kwds)
return wrapper
https://docs.python.org/3/library/functools.html#functools.wraps