代码之家  ›  专栏  ›  技术社区  ›  Nico Schlömer David Maze

python_uuu init_uuu.py,更少污染的命名空间

  •  1
  • Nico Schlömer David Maze  · 技术社区  · 8 年前

    我有一个目录结构

    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 .

    有办法吗 做点什么 可用为 foobar.do_something 不添加 foobar.baz 到命名空间?(没有把所有东西都放进去 _初始版本 )

    1 回复  |  直到 8 年前
        1
  •  1
  •   ash    8 年前

    这种行为记录在 chapter 5 of the Python Language Reference . 如果你 真正地 要禁用它,可以在 __init__.py :

    from .baz import do_something
    del baz
    

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

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