Python Импорт всего из многофайлового модуля в пространство имен - PullRequest
2 голосов
/ 12 марта 2019

Допустим, у меня есть это:

script.py
module/
    __init__.py # just contains: __all__ = ['foo', 'bar']
    foo.py      # has a function called foo
    bar.py      # has a function called bar

Если с script.py я делаю from module import *, это работает, но для вызова функции foo или bar мне нужно сделать foo.foo() / bar.bar().

Есть ли какой-нибудь способ иметь функции foo и bar в пространстве имен, поэтому я мог бы вызвать их, просто выполнив foo() / bar()?

Редактировать: принятый ответ работает для этого примера, но после тестированияэто не работает, если в имени файла указан номер.

Например, если вы добавляете файл с именем bar2.py с функцией с именем hello в папку модуля и соответственно редактируете __init__.py, то в script.py вы не сможете вызватьфункция hello напрямую (просто hello()) над сценарием, хотя вы можете сделать bar2.hello(), которая работает, но не совсем то, что я хочу.

Редактировать: После большого тестирования у меня естьобнаружил, что при удалении __all__ и сохранении импорта все работает.

1 Ответ

3 голосов
/ 12 марта 2019

В __init__.py запишите эти два оператора импорта:

from .foo import foo
from .bar import bar

Редактировать: если имя вашего модуля содержит цифры.

from foo2 import foo
from bar2 import bar
...