Revision: 44520
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at April 13, 2011 07:23 by kylewu
Initial Code
def decorator_with_args(decorator_to_enhance) :
"""
This function is supposed to be used as a decorator.
It must decorate an other function, that is intended to be used as a decorator.
Take a cup of coffee.
It will allow any decorator to accept an arbitrary number of arguments,
saving you the headache to remember how to do that every time.
"""
# We use the same trick we did to pass arguments
def decorator_maker(*args, **kwargs) :
# We create on the fly a decorator that accepts only a function
# but keeps the passed arguments from the maker .
def decorator_wrapper(func) :
# We return the result of the original decorator, which, after all,
# IS JUST AN ORDINARY FUNCTION (which returns a function).
# Only pitfall : the decorator must have this specific signature or it won't work :
return decorator_to_enhance(func, *args, **kwargs)
return decorator_wrapper
return decorator_maker
Initial URL
http://stackoverflow.com/questions/739654/understanding-python-decorators
Initial Description
Initial Title
decorator accepts any argument
Initial Tags
python
Initial Language
Python