Python __init__.py, менее загрязненное пространство имен - PullRequest
0 голосов
/ 03 июля 2018

У меня есть структура каталогов

foobar/
    __init__.py
    baz.py

, где __init__.py - это просто

from .baz import do_something

и baz.py

def do_something():
    return

Теперь, когда я делаю import foobar, я получаю доступ к

foobar
foobar.do_something()

Nice! Тем не менее, один также имеет

foobar.baz

хотя он никогда явно не импортируется. Я полагаю, он был импортирован вместе с do_something.

Есть ли способ сделать do_something доступным как foobar.do_something без добавления foobar.baz в пространство имен? (И не вкладывая все в __init__.py.)

1 Ответ

0 голосов
/ 03 июля 2018

Это поведение описано в главе 5 Справочника по языку Python . Если вы действительно хотите отключить его, вы можете сделать это в __init__.py:

from .baz import do_something
del baz

, который удаляет baz из пространства имен foobar при импорте.

Однако, насколько я знаю, это не обычная практика; Есть ли конкретная причина, по которой вы хотите это сделать?

...