[Python] override di __getattribute__ per avere getter e setter "automatici"
Marco Giusti
marco.giusti a gmail.com
Dom 29 Giu 2008 19:04:31 CEST
On Sun, Jun 29, 2008 at 06:14:05PM +0200, Francesco Stablum wrote:
> Un saluto a tutti,
> mi chiamo Francesco e sono nuovo della lista :-)
>
> Ho cominciato ad usare il python un paio di mesi fa per lavoro e lo
> trovo un linguaggio estremamente interessante e potente, soprattutto
> sul versante dell'introspezione.
>
> 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
>
> l'obiettivo e' quello di creare un "sostituto" di "object" per
> estendere le sue funzionalita' e dare la possibilita'
> di definire variabili d'istanza con l'override degli operatori
> "assegnazione" e "lettura".
>
> Per raggiungere questo scopo ho ridefinito i metodi __getattribute__ e
> __setattr__
>
> l'obiettivo e' quello che un pezzo di codice come questo:
>
> obj.foobar = 42
>
> chiami il metodo "set_foobar(42)" definito dentro "obj"
>
> come vi sembra come idea e come design?
non puoi usare le property di python? non ho letto il codice ma mi
sfugge qualcosa
>>> class Spam(object):
... def _get_egg(self):
... print 'getter'
... return self._egg
... def _set_egg(self, value):
... print 'setter'
... self._egg = value
... egg = property(_get_egg, _set_egg)
...
>>> spam = Spam()
>>> spam.egg = 'ciao'
setter
>>> spam.egg
getter
'ciao'
>>>
> inoltre ho un problemino: non riesco ad accedere alla variabile
> "__foobar" all'interno del metodo __getattribute__
> avete qualche idea? (il problema e' segnato con un FIXME all'interno
> del codice all'url http://rafb.net/p/bQDQAF11.html )
per poter accedere agli attributi devi usare:
object__getattribute__(s, privname)
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome: non disponibile
Tipo: application/pgp-signature
Dimensione: 189 bytes
Descrizione: Digital signature
Url: http://lists.python.it/pipermail/python/attachments/20080629/2d01fa91/attachment.pgp
Maggiori informazioni sulla lista
Python