Les décorateurs

c'est facile !

par Benoît Bryon - www.marmelune.net

PyCon FR - Pau - Octobre 2015

Décorateurs Python

https://www.python.org/dev/peps/pep-0318/

@some_decorator
def some_function():
    """Do something."""
def some_function():
    """Do something."""

some_function = some_decorator(some_function)

Est équivalent à :

En pratique

def user_passes_test(test_func, login_url=None):
    def decorator(view_func):
        @wraps(view_func, assigned=available_attrs(view_func))
        def _wrapped_view(request, *args, **kwargs):
            if test_func(request.user):
                return view_func(request, *args, **kwargs)
            # Many lines...
            return redirect_to_login(...)
        return _wrapped_view
    return decorator

Littéralement : une fonction qui retourne une fonction*
qui retourne une fonction.

* Laquelle prend une fonction en argument.