« Python : Décorateurs » : différence entre les versions
Aller à la navigation
Aller à la recherche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 56 : | Ligne 56 : | ||
def decorateur(func): | def decorateur(func): | ||
''' | ''' | ||
Un décorateur pour n'exécuter ma fonction que si l'utilisateur est connecté | 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 | #Une fonction dans ma fonction, c'est possible | ||
def wrapper_log(): | def wrapper_log(): | ||
''' | ''' | ||
La fonction renvoyée par le décorateur, qui va aller "autour" de la fonction décorée. | |||
''' | ''' | ||
if user_logged: | if user_logged: |
Dernière version du 23 novembre 2021 à 15:27
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>