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