Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2484 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Decorators in Python

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Decorators in Python

n°2415147
phileasfog​g23
Posté le 13-04-2022 à 23:33:00  profilanswer
 

Bonjour,
 
Je me remets un peu à la programmation (je n'ai jamais été très loin). Et plus précisément j'étudie un peu Python.  
Dernièrement, j'ai découvert la notion de Decorators et j'ai un peu de mal avec celle-ci. Je comprends le but général mais le fonctionnement profond m'échappe. J'ai donc joué un peu et vis à vis du code ci-dessous je n'arrive pas à m'expliquer le résultat et la manière dont python éxecute tout ça.
Merci par avance pour votre éclairage.
 
def DecorateFunct(funct):
    print("A little decoration here" )
    def wrrap(*arg):
        #print ("A little decoration here" )
        f=funct(*arg)
        print("Test" )
        return f
    return wrrap
 
@DecorateFunct
def MainFunct(a,b,c,d):
    print("The main one is here" )
    f=(a+b)-(c+d)
    print("The result is ",f)
    print("This is the main function",MainFunct.__name__)
 
@DecorateFunct
def OtherFunct():
    print("This is the other function",OtherFunct.__name__)
 
@DecorateFunct
def AndAnotherOne():
    print("And anotherone" )
 
MainFunct(5,10,1,2)
OtherFunct()
AndAnotherOne()
_____________________________________________________________________________________________
Résultat:
A little decoration here
A little decoration here
A little decoration here
The main one is here
The result is  12
This is the main function wrrap
Test
This is the other function wrrap
Test
And anotherone
Test

mood
Publicité
Posté le 13-04-2022 à 23:33:00  profilanswer
 

n°2415287
phileasfog​g23
Posté le 16-04-2022 à 13:05:33  profilanswer
 

Quelqu'un peut-il m'aider??

n°2415293
TotalRecal​l
Posté le 17-04-2022 à 09:12:16  profilanswer
 

Hello,
Je ne fais pas de Python et je ne comprends pas pourquoi toutes ces méthodes additionnelles dans ton exemple mais je pense que de façon générale l'idée est de "greffer" sur une méthode existante un comportement additionnel.
Par exemple :
- La méthode addition fait la somme de deux nombres.
- Le décorateur affiche le résultat, ou il l'enregistre quand même (logging), ou il envoie une notification à l'utilisateur.

 

Le décorateur "modifie" donc la fonction addition pour y ajouter le fait de "propager l'info qu'elle renvoie quelque part où c'est utile"
Comme ça la fonction "addition" peut se concentrer sur son vrai boulot et les décorations s'occupent de ce qui doit se passer à côté.

 

En espérant ne pas me faire taper par les développeurs Python :o


Message édité par TotalRecall le 17-04-2022 à 09:12:55

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2415344
masklinn
í dag viðrar vel til loftárása
Posté le 18-04-2022 à 13:11:02  profilanswer
 

phileasfogg23 a écrit :

Je me remets un peu à la programmation (je n'ai jamais été très loin). Et plus précisément j'étudie un peu Python.  
Dernièrement, j'ai découvert la notion de Decorators et j'ai un peu de mal avec celle-ci. Je comprends le but général mais le fonctionnement profond m'échappe. J'ai donc joué un peu et vis à vis du code ci-dessous je n'arrive pas à m'expliquer le résultat et la manière dont python éxecute tout ça.


Ya rien de spécial aux décotateurs, c'est juste une syntaxe dédiée pour appliquer une fonction à une fonction:

Code :
  1. @foo
  2. def bar(): ...


est équivalent à:

Code :
  1. def bar(): ...
  2. bar = foo(bar)


Donc dans ton bout de code, t'as "DecorateFunct" qui est immédiatement appelé 3 fois de suite quand tu définis des fonctions décorées, puis les fonctions décorées sont appelées.
 
Dans la mesure où ton décorateur remplace les fonctions par un wrapper (`wrrap`), toutes les fonctions "s'appellenent" wrrapt, parce-que c'est la fonction qui existe. C'est pour ça qu'il existe functools.wraps qui essaie de copier les métadonnées de la fonction décorée au wrapper (et dans mon souvenir il y a pas mal de trucs que ça copie pas, la librairie decorator fait ça mieux mais est un peu moins flexible et plus couteuse).


Message édité par masklinn le 18-04-2022 à 13:11:32

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2415624
jpl38
Posté le 23-04-2022 à 15:48:24  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Decorators in Python

 

Sujets relatifs
Raccourci bureau en Pythonerreur requete ldap depuis python
Chaînes de caractères en Python[PYTHON] revenir "menu principal"
Création d'une clé de registre dans un paquet python[PYTHON] récupérer données
[Python] Itération sur un DataFrame (pandas)[python] Youtube comment downloader
[Python] - Utilisation dictionnaire 
Plus de sujets relatifs à : Decorators in Python


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR