August 2018
Intermediate to advanced
366 pages
10h 14m
English
Decorators are usually not straightforward for anyone who faces them for the first time, but once you get used to them, they become a very convenient tool to extend a function's behavior or implement a lightweight form of aspect-oriented programming.
But even once decorators become natural and part of everyday development, they have subtleties that are not obvious until you face them for the first time.
It might not be immediately obvious when you are applying a decorator, but by using them, you are changing the signature of the decorated function, up to the point that the name of the function itself and its documentation are lost:
def decorator(f): def _f(*args, **kwargs): return f(*args, **kwargs) return _f @decorator ...