【发布时间】:2011-01-12 08:31:21
【问题描述】:
我在 python/Lib 源代码中看到了很多,但我不知道它是干什么用的。
我认为它用于限制模块的可访问成员。所以只有__all__ 的元素会在dir(module) 出现。
我做了一个小例子,发现它没有按预期工作。
那么... python __all__ 模块级变量是干什么用的?
【问题讨论】:
标签: python namespaces
我在 python/Lib 源代码中看到了很多,但我不知道它是干什么用的。
我认为它用于限制模块的可访问成员。所以只有__all__ 的元素会在dir(module) 出现。
我做了一个小例子,发现它没有按预期工作。
那么... python __all__ 模块级变量是干什么用的?
【问题讨论】:
标签: python namespaces
http://docs.python.org/tutorial/modules.html#importing-from-a-package
现在当用户写入时会发生什么
from sound.effects import *?理想情况下, 人们希望这会以某种方式发生 输出到文件系统,找到哪个 包中存在子模块, 并将它们全部导入。这可能需要 很长一段时间和导入子模块 可能有不想要的副作用 应该只发生在子模块 是显式导入的。唯一的解决方案是包装 作者提供明确的索引 包裹。导入语句使用 以下约定:如果 包的
__init__.py代码定义了一个 名为__all__的列表,它被认为是 应该的模块名称列表 当from package import *时被导入 遇到。这取决于 包作者保留此列表 最新版本的新版本 包发布。包作者 也可以决定不支持它,如果 他们没有看到导入 * 从他们的包裹中。
【讨论】:
它有两个目的:
任何阅读源代码的人都会知道公开的公共 API 是什么。它并没有阻止他们在私有声明中四处寻找,但确实提供了一个很好的警告。
使用from mod import * 时,只会导入__all__ 中列出的名称。在我看来,这并不重要,因为导入所有内容真的是个坏主意。
【讨论】:
__all__。 pydoc 可以,我很确定 epydoc 之类的也可以。
__all__
【讨论】: