Almacenar objetos en XML
Joaquin Jose del Cerro Murciano
jjdelcerro en cenoclap.es
Vie Abr 23 07:19:08 CEST 2004
El Jueves, 22 de Abril de 2004 18:53, Hernan Foffani escribió:
> Andres Moya escribio:
> > def cargar(string_xml):
> >
> > [... leer el nombre del modulo y la clase ...]
> >
> > modulo = __import__(nombre_modulo)
> > instancia = eval("modulo." + nombre_clase + "()")
> >
> > [... rellenar los atributos ...]
> >
> > return instancia
>
> Tienes otras alternativas al ``eval''.
> Puedes hacer algo así:
>
> modulo = __import__(nombre_modulo)
> instancia = modulo.__dict__[nombre_clase]()
> ... etc ...
>
> -H.
Basicamente la idea esta bien, pero yo me tropeze con problemas con el
__import__ cuando tienes que importar un modulo de dentro de un paquete.
En lugar de gastar __import__ directamente, gasto un par de funcioncitas :
def moduleimport(name):
mod=__import__(name)
components=name.split('.')
for comp in components[1:]:
mod=getattr(mod,comp)
return mod
def classimport(classPath):
"""
Recibe un nombre de clase indicando el paquete en el que
aparece y carga su modulo devolbiendo la clase.
El formato de classPath es una cadena como:
paquete.(...paquete...).modulo.nombre_de_clase
"""
klass=None
try:
posicionPunto=classPath.rfind(".")
mod=moduleimport(classPath[:posicionPunto])
klass=getattr(mod,classPath[posicionPunto+1:])
except Exception,errmsg:
raise ImportError, \
"Se ha producido un error importando la clase '%s'. %s" % (\
repr(classPath),
errmsg
)
return klass
El codigo de moduleimport ha sido extraido de "Python Library Reference",
capitulo "2.1 Built-in Functions".
Un saludo
Joaquin
------------ 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