Almacenar objetos en XML
Chema Cortés
py en ch3m4.org
Lun Abr 26 13:29:16 CEST 2004
El Lunes, 26 de Abril de 2004 12:42, Andres Moya escribió:
> El lun, 26-04-2004 a las 12:38, Andres Moya escribió:
> > El lun, 26-04-2004 a las 11:34, Chema Cortés escribió:
> > > A ver qué te parece esta solución (sin llegar a emplear "metaclass"
> > > :-P):
> > >
> > > class Chorra(object):
> > > def __new__(cls, nombre_modulo, nombre_clase, *args, **kw):
> > > Cls=__import__(nombre_modulo, globals(), locals(),
> > > [nombre_clase]) return Cls(*args,**kw)
> > >
> > > instancia = Chorra(nombre_modulo, nombre_clase)
> >
> > Podría valer si quisiera eso, pero no es el caso. O sea, no se trata de
> > un nuevo, sino de un restaurar...
>
> Esperate, que estoy investigando eso del __new__ y parece que tiene más
> chicha de la que pensaba. Seguiremos informando...
Bueno, aunque si has probado el código habrás visto que no funciona (eso me
pasa por no probar antes el código). La versión correcta, para quien le
interese:
class Chorra(object):
def __new__(cls, nombre_modulo, nombre_clase, *args, **kw):
Cls=getattr(__import__(nombre_modulo),nombre_clase)
return Cls(*args,**kw)
instancia = Chorra(nombre_modulo, nombre_clase)
Para lo que quieres, crear una instancia sin llamar al constructor, mírate el
módulo 'new'
import new
class Chorra(object):
def __new__(cls, nombre_modulo, nombre_clase, pickledDictFile):
Cls=getattr(__import__(nombre_modulo),nombre_clase)
inst=new.instance(Cls)
inst.__dict__.update(cPickle.load(pickledDictFile))
return inst
instancia = Chorra(nombre_modulo, nombre_clase, pickleFile)
Como se ve en el código, sólo utilizo pickle para almacenar el diccionario del
objeto, ya que me parece más seguro. Seguramente se podría recuperar el
objeto directamente desde pickle.
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es
Más información sobre la lista de distribución Python-es