[Python] override di __getattribute__ per avere getter e setter "automatici"

Francesco Stablum stablum a gmail.com
Dom 29 Giu 2008 21:48:43 CEST


On Sun, Jun 29, 2008 at 7:07 PM, Daniele Varrazzo <piro a develer.com> wrote:
>> Vorrei condividere con voi del codice che ho scritto per creare setter
>> e getter "automatici".
>> potete visionarlo al seguente url:
>> http://rafb.net/p/bQDQAF11.html

> http://www.python.org/download/releases/2.2.3/descrintro/#metaclass_examples

Grazie mille per le risposte!
ho utilizzato il trick della metaclasse documentato sul manuale e
funziona alla grande!
(per quanto riguarda PEAK, invece non ho ben capito di cosa si tratti,
mi sembra un po' fumoso come progetto)

il codice di ImprovedObject si e' ridotto a questo:
class ImprovedObject(object):
    def __init__(self):
        self.__metaclass__ = autoprop

l'assegnazione di __metaclass__ l'ho messa nell'__init__ della
superclasse al fine di non doverla
dichiarare nelle classi figlie.

Le metaclassi sono molto interessanti, cosi' come tutto l'aspetto di
introspezione del python e
le magnifiche lambda. Ho come l'impressione che tutti questi elementi
manderanno in pensione
un sacco di design pattern descritti in letteratura.

per Marco:
e' vero, avrei potuto anche utilizzare direttamente property() ma nel
caso di un gran numero
di variabili d'istanza diventa troppo ripetitivo ogni volta dover
specificare che il getter/setter di "foobar"
e' get_foobar/set_foobar.
A livello di quantita' di codice cerco le soluzioni piu' "riassuntive"
possibili.

grazie, e alla prossima!
Francesco


Maggiori informazioni sulla lista Python