您可以定义一个全局名称__all__
,设置为名称列表或元组,以限制导入的内容以及通常会列出的文档工具:
__all__ = ['function1', 'ClassName2']
该__all__
名称限制了from test import *
将导入的内容,文档工具也使用该名称来限制作为给定模块的公共 API 列出的内容。
请参阅import
声明文档:
模块定义的公共名称是通过检查模块命名空间中的变量来确定的__all__
;如果已定义,它必须是由该模块定义或导入的名称的字符串序列。中给出的名称__all__
都被认为是公开的,并且必须存在。如果__all__
未定义,则公共名称集包括在模块名称空间中找到的所有不以下划线字符 ( '_'
) 开头的名称。__all__
应该包含整个公共 API。它旨在避免意外导出不属于 API 的项目(例如在模块中导入和使用的库模块)。
您检查的__init__
模块几乎肯定会定义__all__
序列。
您还可以从模块中再次删除名称,前提是您的函数以后不需要访问全局名称:
del sys
IPython 自动补全否则使用所有不以下划线开头的名称;自动完成会忽略__all__
列表,但会忽略_sys
.
numpy.__init__
模块(版本 1.8.0 之前)本身再次从全局命名空间中删除名称:
if __NUMPY_SETUP__:
import sys as _sys
_sys.stderr.write('Running from numpy source directory.\n')
del _sys
但是这里sys
是绑定的_sys
,即使它没有被删除,IPython 也会忽略该名称。numpy
还在该模块中建立一个__all__
列表。
在numpy
版本 1.8.0 和更新的版本import sys
中,向该文件添加了一条语句,IPython 提供它用于自动完成,因为它仍然是全局命名空间的一部分。