Как вы динамически загружаете классы Python из заданного каталога?

Если я определяю модуль 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

Я надеялся изменить его, чтобы он возвращал объекты класса.

6
задан joslinm 10 May 2012 в 03:29
поделиться