« 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>