Импортировать объекты из модуля Python, имя которого совпадает с именем импорта __init__ - PullRequest
2 голосов
/ 08 октября 2019

Проект структурирован следующим образом:

dir/
    __init__.py
    foo.py

Foo.py имеет функцию, которая использует локальное назначение:

"""foo.py"""

BAR = 12345
def foo():
    # do something with BAR

Моя цель - импортировать объект BARиспользовать в моем собственном коде. Однако __init__.py содержит импорт строки, которая маскирует любую попытку импорта из foo как модуль:

"""__init__.py"""

from dir.foo import foo

Так что, когда я взаимодействую с пакетом, я могу видеть только dir.foo как определение функции вместо модуля. Как я могу получить доступ к dir.foo.BAR?

1 Ответ

1 голос
/ 08 октября 2019

Lame hack:

import sys
foo_module = sys.modules["dir.foo"]
bar = foo_module.BAR

Лучше было бы попросить автора dir не затенять имя подмодуля в пространстве имен верхнего уровня, например, избегая именования функции таким же образомкак модуль, в котором он был определен.

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