Python __init__.py,污染较少的命名空间

Python __init__.py, less polluted namespace

我有一个目录结构

foobar/
    __init__.py
    baz.py

其中 __init__.py 只是

from .baz import do_something

baz.py

def do_something():
    return

现在,当我 import foobar 时,我可以访问

foobar
foobar.do_something()

不错!但是,还有一个

foobar.baz

尽管从未明确导入。我想它已与 do_something.

一起导入

有没有办法让 do_something 可以作为 foobar.do_something 使用,而无需将 foobar.baz 添加到命名空间? (并且没有将所有内容都放入 __init__.py。)

此行为记录在 chapter 5 of the Python Language Reference 中。如果您真的想要禁用它,您可以在__init__.py:

中执行此操作
from .baz import do_something
del baz

导入时从 foobar 的命名空间中删除 baz

但是,据我所知,这不是常见的做法;您想这样做有什么特别的原因吗?