[Python] creazione attributi di classe da dizionario

Marco Buttu mbuttu a oa-cagliari.inaf.it
Sab 19 Ott 2013 10:31:20 CEST


On 10/19/2013 09:32 AM, Riccardo mancuso wrote:
> volevo chiedere se è possibile creare degli attributi di una classe, 
> partendo da un dizionario.
> ...
> da utilizzare in seguito nella chiamata dell'istanza.
> E' possibile ?

Certo :) La soluzione migliore in questo caso e' far fare il lavoro ad 
una metaclasse, all'atto della preparazione del dizionario degli 
attributi. Il metodo __prepare__() della metaclasse viene chiamato prima 
di tutto, ed il suo compito e' per l'appunto preparare il dizionario 
degli attributi. Come puoi vedere e' semplicissimo (Python 3):

 >>> class MyMetaclass(type):
...     def __prepare__(clsname, bases):
...         return {'auto': 1, 'casa': 2, 'moto': 3}


Dopo che __prepare__() ha restituito il dizionario, Python aggiunge 
alcuni attributi speciali, dopodiche' passa il dizionario al metodo 
__new__() della metaclasse, che si occupa di istanziare la classe. 
Quindi non devi far altro che far istanziare la tua classe da 
MyMetaclass, e lei fara' il lavoro per te:

 >>> class MyClass(metaclass=MyMetaclass):
...     pass
...
 >>> foo = MyClass()
 >>> foo.auto, foo.casa, foo.moto
(1, 2, 3)

Ciao, M.

-- 
Marco Buttu

INAF - Osservatorio Astronomico di Cagliari
Via della Scienza, Loc. Cuccuru Angius
09047 Selargius (CA)
Phone: 070 711 80 217
Email: mbuttu a oa-cagliari.inaf.it



Maggiori informazioni sulla lista Python