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: mbu...@oa-cagliari.inaf.it

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a