« Python : Décorateurs » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
(Page créée avec « <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): '''... »)
 
Aucun résumé des modifications
 
(3 versions intermédiaires par la même utilisatrice non affichées)
Ligne 1 : Ligne 1 :
= 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'>
<syntaxhighlight lang='python'>
#! /usr/bin/env python3
#! /usr/bin/env python3
Ligne 35 : 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'>

  1. ! /usr/bin/env python3
  2. coding: utf-8
  1. 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
      1. PREMIERE METHODE
  1. on passe le décorateur après la définition de la fonction
  2. Fonction de base

def bonjour():

   print("Bonjour")

print(f"Avant") bonjour()

  1. On utilise le décorateur pour la fonction bonjour

bonjour = decorateur(bonjour)

print(f"Apres :") bonjour()

      1. SECONDE METHODE
  1. On passe le décorateur avant la fonction

@decorateur def salut():

   print("Salut")

salut() </syntaxhighlight>

Exemple plus complexe (et plus utile)

<syntaxhighlight lang='python'>

  1. ! /usr/bin/env python3
  2. coding: utf-8
  1. Exemple complexe de décorateurs
  1. 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>