[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