Необходимость оценки строки для доступа к классу из модуля - PullRequest
1 голос
/ 01 марта 2011

Я загрузил один из своих модулей с помощью __import __.

Теперь у меня есть модуль, сохраненный в переменной, но я бы хотел создать экземпляр класса mymodule. Дело в том, что я получил имя модуля, переданное в виде строки в мой сценарий. Итак, у меня есть переменная, содержащая модуль, и у меня есть имя модуля, но в виде строки.

variable_conisting_module.string_variable_with_correct_classname () не работает. Потому что он говорит, что в модуле нет такой вещи как «string_variable_with_correct_classname» - потому что он не оценивает имя строки. Как я могу это сделать?

1 Ответ

1 голос
/ 03 марта 2011

Ваша проблема в том, что __import__ предназначен для использования внутренними компонентами импорта, а не для непосредственного использования.Одним из симптомов этого является то, что при импорте модуля из пакета возвращается пакет верхнего уровня, а не сам модуль.

Есть два способа справиться с этим.Предпочтительным способом является использование importlib.import_module() вместо непосредственного использования __import__.

Если вы используете более старую версию Python, которая не обеспечивает importlib, то вы можете создать свою собственную вспомогательную функцию:

import sys
def import_module(module_name):
    __import__(module_name)
    return sys.modules[module_name]

Также см. http://bugs.python.org/issue9254

...