我在 __init__.py
文件中看到 __all__
。它有什么作用?
原文由 varikin 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在 __init__.py
文件中看到 __all__
。它有什么作用?
原文由 varikin 发布,翻译遵循 CC BY-SA 4.0 许可协议
链接到但未在此处明确提及的正是使用 __all__
的时间。它是一个字符串列表,用于定义模块中使用 from <module> import *
时将导出的符号。
例如,以下代码在 foo.py
中显式导出符号 bar
和 baz
:
__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 许可协议
2 回答5k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
4 回答936 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
它是该模块的公共对象列表,由
import *
解释。它覆盖了隐藏所有以下划线开头的默认值。