Python __all__
1. 问题
当时用 from module import *
时,希望对从模块或包导出的符号进行精确控制。
2. 解决方案
定义变量 __all__
来明确地列出需要导出的内容。
def spam():
pass
def grok():
pass
blah = 42
# 只导出 spam、grok
__all__ = ['spam', 'grok']
3. 讨论
尽管强烈反对使用 from module import *
, 但是在定义了大量变量名的模块中频繁使用。 如果你不做任何事, 这样的导入将会导入所有不以下划线开头的。 另一方面,如果定义了__all__
, 那么只有被列举出的东西会被导出。
如果你将__all__
定义成一个空列表, 没有东西将被导入。 如果__all__
包含未定义的名字, 在导入时引起 \(AttributeError\)。