Python : Décorateurs
Aller à la navigation
Aller à la recherche
Base
Un décorateur est un objet permettant de modifier le comportement d'une fonction sans avoir à intervenir à l'intérieur de celle-ci. C'est utile pour étendre simplement les fonctionnalités d'un script ou d'une fonction.
Exemple simple
<syntaxhighlight lang='python'>
- ! /usr/bin/env python3
- coding: utf-8
- Définition d'un décorateur, qui fait des choses avec une fonction
def decorateur(func):
Mon décorateur prend une fonction en paramètre et la renvoie décorée print("---------") return func
- PREMIERE METHODE
- on passe le décorateur après la définition de la fonction
- Fonction de base
def bonjour():
print("Bonjour")
print(f"Avant") bonjour()
- On utilise le décorateur pour la fonction bonjour
bonjour = decorateur(bonjour)
print(f"Apres :") bonjour()
- SECONDE METHODE
- On passe le décorateur avant la fonction
@decorateur def salut():
print("Salut")
salut() </syntaxhighlight>
Exemple plus complexe (et plus utile)
<syntaxhighlight lang='python'>
- ! /usr/bin/env python3
- coding: utf-8
- Exemple complexe de décorateurs
- On simule ici un site web qui gère des connexions utilisateurs
user_logged = False
def decorateur(func):
Un décorateur pour n'exécuter ma fonction que si l'utilisateur est connecté. Il va renvoyer wrapper, qui est lui-même une fonction. #Une fonction dans ma fonction, c'est possible def wrapper_log(): La fonction renvoyée par le décorateur, qui va aller "autour" de la fonction décorée. if user_logged: return func() else: print("Connectez-vous pour accéder au profil") #On renvoi la fonction du wrapper en tant qu'objet return wrapper_log
@decorateur def profile():
Fonction d'accès au profil utilisateur. Elle ne fait que ça ! print("Le code html du profil...")
profile() </syntaxhighlight>