__all__ 在 Python 中是什么意思?

新手上路,请多包涵

我在 __init__.py 文件中看到 __all__ 。它有什么作用?

原文由 varikin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 487
2 个回答

它是该模块的公共对象列表,由 import * 解释。它覆盖了隐藏所有以下划线开头的默认值。

原文由 Jimmy 发布,翻译遵循 CC BY-SA 3.0 许可协议

链接到但未在此处明确提及的正是使用 __all__ 的时间。它是一个字符串列表,用于定义模块中使用 from <module> import * 时将导出的符号。

例如,以下代码在 foo.py 中显式导出符号 barbaz

 __all__ = ['bar', 'baz']

waz = 5
bar = 10
def baz(): return 'baz'

然后可以像这样导入这些符号:

 from foo import *

print(bar)
print(baz)

# The following will trigger an exception, as "waz" is not exported by the module
print(waz)

如果上面的 __all__ 被注释掉,这段代码将执行到完成,因为 import * 的默认行为是导入所有不以下划线开头的符号,从给定的命名空间。

参考: https ://docs.python.org/tutorial/modules.html#importing-from-a-package

注意: __all__ 仅影响 from <module> import * 行为。 __all__ 中未提及的成员仍然可以从模块外部访问,并且可以使用 from <module> import <member> 导入。

原文由 Alec Thomas 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题