`__all__` 控制被导入的内容
对从模块或包导出的符号进行精确控制
问题
当使用from module import *
语句时,希望对从模块或包导出的符号进行精确控制。
解决方案
在你的模块中定义一个变量 __all__
来明确地列出需要导出的内容,也就是模块中公开的成员。
举个例子:
1# somemodule.py
2def spam():
3 pass
4
5def grok():
6 pass
7
8blah = 42
9# Only export 'spam'
10__all__ = ['spam']
尽管强烈反对使用 from module import *
但是在定义了大量变量名的模块中频繁使用。
- 如果你不做任何事, 这样的导入将会导入所有不以下划线开头的。
- 如果定义了 all , 那么只有被列举出的东西会被导出。
- 如果你将 all 定义成一个空列表, 没有东西将被导入。
- 如果 all 包含未定义的名字, 在导入时引起AttributeError。
Note:
在 Python 中,__all__
是一个特殊的变量,用于定义一个模块中应该被导出的公共接口(即可供其他模块使用的内容)。它是一个包含字符串的列表,表示该模块中可以被导入的符号(变量、函数、类等)。
为什么在 __all__
中使用字符串呢?
这是因为 __all__
中的字符串代表的是模块中的名称,而不是变量本身。当我们导入一个模块时,我们使用的是模块的名称,而不是模块中定义的变量的名称。