Hola, creo que el "subject" no es demasiado descriptivo, pero la verdad es que no sé muy bien como poner uno más adecuado. Intentaré explicar el problema, a ver si alguien puede darme una pista.
Tengo una estructura de directorio y ficheros como la siguiente: my_stuffs/ | | -- my_program.py | | -- my_libs/ | | -- __init__.py | | -- dispatcher.py | | -- mod1.py | | -- mod2.py (1) __init__.py está vacío. (2) mod1.py tiene clases. Por ejemplo, C11, C12, C13... (3) mod2.py tiene clases. Por ejemplo, C21, C22, C23... No hay riesgo de dos clases con el mismo nombre, una en cada módulo. (4) En my_program.py necesito crear un objeto de cualquiera de las clases contenidas en mod1 o mod2. Durante la ejecución del programa el nombre de la clase es conocido, como cadena de caracteres. A partir del nombre necesito crear un objeto de esa clase. Para esa creación del objecto correspondiente he implementado dispatcher.py Ahora mismo tiene un aspecto similar a éste: ---------------------------------------------------------------------------- import mod1 import mod2 def getobject(name): if hasattr(mod1, name): return getattr(mod1, name)() if hasattr(mod2, name): return getattr(mod2, name)() ---------------------------------------------------------------------------- De esta forma, en my_program.py me basta con hacer algo como: ---------------------------------------------------------------------------- from my_libs import dispatcher [...] classname = 'C21' my_object = dispatcher.getobject(classname) [...] ---------------------------------------------------------------------------- Esto funciona. Pero no me gusta, porque en el futuro varias personas irán añadiendo módulos dentro de my_libs y eso requiere, tal y como he escrito el código hasta ahora, editar dispatcher.py para añadir un nuevo import y un nuevo par de líneas como: ---------------------------------------------------------------------------- import modN if hasattr(modN, name): return getattr(modN, name)() ---------------------------------------------------------------------------- ¿No hay forma de hacerlo más automático? Lo ideal sería hacer un loop a los módulos que existan en el directorio my_libs, de forma que no sea necesario escribir a mano esas dos líneas, uno por módulo. Cualquier idea será más que bienvenida. Muchas gracias por adelantado. Saludos cordiales, Jose
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/