Decoriamo! – 2a puntata

Nel post precedente abbiamo visto cos’è un decorator in Python, ora cercheremo di dare un senso alla sua esistenza con degli esempi pratici.

Dato che un decorator alla fin fine è un oggetto chiamabile che prende come (unico) parametro l’oggetto da decorare, possiamo scrivere questo:

class Protect:
    def __init__(self, func)
        self.function = func
    def __call__(self, *args):
        try:
            return self.function(*args)
        except Exception, e
            print "Error: %s" % (e)

Abbiamo così una classe che, quando instanziata, è chiamabile (abbiamo implementato __call__ a tale scopo) e si occuperà di eseguire la funzione che abbiamo passato come parametro al costruttore in maniera sicura. Applichiamola come decorator ad una funzione:

@Protect
def sprovveduta(x):
   return 1 / x

Questo ci consente di ottenere:

>>> sprovveduta(0)
Error: integer division or modulo by zero

La classe protect non è molto sofisticata, ma già si dovrebbe intravedere la potenza dei decorators!

One thought on “Decoriamo! – 2a puntata

  1. Pingback: Decoriamo! - 3a puntata « MasciBlog

Comments are closed.