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.

Décorateurs - PyConFr 2015 - Pau

By Benoît Bryon

Décorateurs - PyConFr 2015 - Pau

Les décorateurs Python permettent d'accomplir pas mal de choses avec une syntaxe plutôt sympathique. Mais quand il s'agit de coder (ou de lire le code) des décorateurs, ça peut vite donner le tournis. Par exemple, un décorateur qui accepte des arguments c'est, littéralement : "une fonction qui retourne une fonction qui prend une fonction en argument et retourne une fonction". Hein ? Heureusement, il y a des astuces pour s'y retrouver, et même des bibliothèques pour se concentrer sur l'essentiel.

  • 912