Python Decoratori

Da Andreabont's Wiki.

Un decoratore è uno dei pattern fondamentali, e consiste nell'aggiungere funzionalità a classi e funzioni a run-time. In Python l'uso viene semplificato attraverso la notazione dedicata "@", la quale chiama il decoratore specificato passandogli la funzione o l'oggetto da decorare e aspetta come ritorno la funzione o l'oggetto decorato da utilizzare.

Decorare una funzione

Codice

def entryExit(funzione_da_decorare):
    def wrapper(*args, **kwargs):
        print "Entering", funzione_da_decorare.__name__
        result = funzione_da_decorare(*args, **kwargs)
        print "Exited", funzione_da_decorare.__name__
        return result
    return wrapper

@entryExit
def func1():
    print "inside func1"

func1()

Risultato

Entering func1
inside func1
Exited func1

Decoratore con parametri

Codice

def opzioni(nome):
    def mio_decoratore(funzione_da_decorare):
        def wrapper(*args, **kwargs):
            kwargs.update({'nome': nome})
            print "Chiamo la funzione %s" % funzione_da_decorare
            return funzione_da_decorare(*args, **kwargs)
        return wrapper
    return mio_decoratore

@opzioni("pinco")
def stampa_nome(nome = None):
        print "Ciao ", nome

stampa_nome()

Risultato

Chiamo la funzione <function stampa_nome at 0x7f6094799398>
Ciao  pinco