Как получить экземпляр модуля для класса в Python? - PullRequest
11 голосов
/ 06 октября 2009

Я изучаю Python и, как всегда, амбициозен с моими стартовыми проектами. Я работаю над системой плагинов для набора инструментов сайта сообщества для App Engine. У моего суперкласса плагинов есть метод с именем install_path. Я хотел бы получить __path__ для __module__ для self (который в этом случае будет подклассом). Проблема в том, что __module__ возвращает str, а не сам экземпляр модуля. eval() ненадежен и нежелателен, поэтому мне нужен хороший способ получить в руки фактический экземпляр модуля, который не включает в себя eval получение str возврата от __module__.

Ответы [ 3 ]

13 голосов
/ 06 октября 2009

Диктовка sys.modules содержит все импортированные модули, поэтому вы можете использовать:

mod = sys.modules[__module__]
1 голос
/ 06 октября 2009

Кроме того, вы можете использовать глобальную __file__ переменную модуля , если все, что вам нужно, это путь к модулю.

1 голос
/ 06 октября 2009

Как насчет Импорт модулей

X = __import__(‘X’) работает как import X, с той разницей, что вы 1) передать имя модуля в виде строки и 2) явно назначить его переменной в вашем текущем пространстве имен.

Вы можете передать имя модуля (вместо 'X') и вернуть экземпляр модуля. Python гарантирует, что вы не импортируете один и тот же модуль дважды, поэтому вам следует вернуть экземпляр, который вы импортировали ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...