Si defino un módulo módulo con un directorio correspondiente de module/
, ¿puedo cargar dinámicamente las clases de módulos secundarios como a.py
o b.py
?¿Cómo carga dinámicamente las clases de python desde un directorio determinado?
--module
----a.py
----b.py
¿Se requiere conocer el nombre de la clase a buscar? ¿Podría configurar una clase base que de alguna manera cargar estos niños?
El caso de uso básico es permitirle al usuario escribir un código propio en el que se cargará el programa. Lo mismo que cómo los rieles le permiten escribir sus propios controladores, vistas y modelos en ciertos directorios.
El código para los módulos de carga dinámica hasta ahora que tengo es
def load(folder):
files = {}
for filename in os.listdir(folder):
if (filename[0] != '_' and filename[0] != '.'):
files[filename.rstrip('.pyc')] = None
# Append each module to the return list of modules
modules = []
mod = __import__(folder, fromlist=files.keys())
for key in files.keys():
modules.append(getattr(mod, key))
return modules
Tenía la esperanza de modificarlo para devolver los objetos de la clase.
Si marca otras preguntas [SE] (http://stackoverflow.com/questions/193161/what-is-the-best-project-structure-for-a-python-application) sobre la estructura de datos de los módulos de python, la tercera respuesta da una muy buena respuesta corta. Supongo que podrías hacer algo como: 'from module import a' dinámicamente. – Zenon