MasciBlog

Riflessioni semiserie dal cubicolo

Decoriamo! – 2a puntata

Pubblicato da masci su 3 Maggio 2008

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!

Una Risposta a “Decoriamo! – 2a puntata”

  1. [...] – 3a puntata Dopo aver visto cosa sono i decorators in Python ed uno dei tanti modi di implementarli, approfondiamo l’argomento scrivendo un decorator un po’ più [...]

Lascia un commento

XHTML: Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>