« Python : Décorateurs » : différence entre les versions
Aller à la navigation
Aller à la recherche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| (2 versions intermédiaires par la même utilisatrice non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
= Base = | = Base = | ||
Un décorateur est un objet permettant de modifier le comportement d'une fonction sans avoir à intervenir à l'intérieur de celle-ci. | 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 == | == Exemple simple == | ||
| Ligne 39 : | Ligne 40 : | ||
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> | </syntaxhighlight> | ||
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>