Если я определяю модуль moduleс соответствующим каталогом module/
, могу ли я динамически загружать классы из дочерних модулей например a.py
или b.py
?
--модуль
----a.py
----b.py
Требуется ли для этого знать имя класса для поиска? Могу ли я настроить базовый класс, который каким-то образом загрузит этих детей?
Основной вариант использования — позволить пользователю написать некоторый свой собственный код, который будет загружен программой. Так же, как рельсы позволяют вам писать свои собственные контроллеры, представления и модели в определенных каталогах.
Код для динамической загрузки модулей, который у меня есть до сих пор,
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
Я надеялся изменить его, чтобы он возвращал объекты класса.