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