I decoratori in python
I decoratori sono strumenti del linguaggio Python che hanno in input una funzione ( o classe ) e ne modificano il comportamento, senza cambiare il codice sorgente.
Perché si chiamano decoratori? Sono detti decoratori perché incorporano la funzione o classe come in un pacco regalo, aggiungendo o personalizzando le sue funzionalità.
Un esempio pratico
Definisco una funzione decoratore che riceve in input una funzione.
Al suo interno creo una sottofunzione (elabora) per stampare due stringhe a video ed eseguire la funzione passata come parametro.
- def decoratore(funzione):
- def elabora():
- print("1")
- funzione()
- print("2")
- return elabora
Poi definisco una normale funzione (stampa)
- def stampa():
- print("Hello")
Inserisco la funzione stampa() dentro il decoratore.
- stampa = decoratore(stampa)
Infine la eseguo
- stampa()
L'output dell'interprete python è il seguente
1
Hello
2
Quando lancio la funzione, viene eseguito automaticamente il decoratore.
A sua volta il decoratore esegue la funzione.
Il risultato finale include l'elaborazione del decoratore e della funzione.
Metodo alternativo
Per associare una funzione a un decoratore, posso anche indicarla nella riga precedente alla definizione della funzione stessa.
In questo caso devo anteporre il simbolo @ al nome del decoratore.
- @decoratore
- def stampa():
- print("Hello")
Non occorre fare altro.
Quando chiamo la funzione, l'interprete esegue automaticamente il decoratore.
- stampa()
Il risultato finale è sempre lo stesso
1
Hello
2
E così via.