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 def sumtwo(a, b): """Sums a and b""" return a + back
The sumtwo
function was decorated with decorator
, but now, if we try to access the function documentation or name, they won't be accessible anymore:
>>> print(sumtwo.__name__...