Я изучаю Python, и, как всегда, я занимаюсь амбициями своих стартовых проектов. Я работаю над плагиновой системой для инструментария сообщества для App Engine. Мой суперкласс-плагин имеет метод под названием install_path
. Я хотел бы получить __path__
для __module__
для self
(который в этом случае будет подклассом). Проблема в том, что __module__
возвращает a str
, а не сам экземпляр модуля. eval()
является ненадежным и нежелательным, поэтому мне нужен хороший способ получить реальный экземпляр модуля, который не включает eval
ling str
Я возвращаюсь из __module__
.
Как получить экземпляр модуля для класса в Python?
Ответ 1
sys.modules
dict содержит все импортированные модули, поэтому вы можете использовать:
mod = sys.modules[__module__]
Ответ 2
Как насчет Импорт модулей
X = __import__(‘X’)
работает какimport X
, с той разницей, что вы 1) передать имя модуля в виде строки и 2) явно назначить его переменной в вашем текущем пространстве имен.
Вы можете передать имя модуля (вместо "X" ) и вернуть экземпляр модуля. Python гарантирует, что вы не импортируете один и тот же модуль дважды, поэтому вам нужно вернуть экземпляр, который вы импортировали ранее.
Ответ 3
В качестве альтернативы вы можете использовать модуль global __file__
variable, если все, что вы хотите, это путь к модулю.