为什么__all__只包含字符串对象?
问题内容:
今天,我遇到了以下pylint错误:
无效所有对象(E0604):
__all__中的无效对象%r必须仅包含字符串当__all__中出现无效(非字符串)对象时使用。
我很好奇为什么直接暴露对象被认为是不正确的?
问题答案:
因为它应该是 名称 列表,而不是值列表:
如果标识符列表用星号(
'*'
)代替,则模块中定义的所有公共名称都将在该import
语句发生的作用域的本地名称空间中绑定。模块定义的 公共名称 是通过检查模块的命名空间中名为的变量来确定的
__all__
;
如果已定义,则它必须是由该模块定义或导入的名称的字符串序列
。给出的名称__all__
均被视为公开名称,必须存在。如果__all__
未定义,则公共名称集将包含在模块命名空间中找到的所有名称,这些名称不以下划线字符('_'
)开头。__all__
应该包含整个公共API。目的是避免意外导出不属于API的项目(例如在模块中导入和使用的库模块)。[语言参考]