我对python有一个基本的了解,但在某些地方我已经读过,当我们使用以下语法导入模块时,它不会导入在_(单个下划线)开头的指定模块中定义的属性。谁能告诉我它是如何发生的以及为什么会这样?
from module.submodule import *
答案 0 :(得分:6)
这是设计的。以下划线开头的变量仅被视为内部使用(与其他语言中的私有不同)。它们仍然可以直接在模块上访问,但它们不会导入*
导入。
来自documentation约*
次导入:
这将导入除以下划线(_)开头的所有名称。在大多数情况下,Python程序员不使用此工具,因为它在解释器中引入了一组未知的名称,可能隐藏了您已定义的一些内容。
这也是为了告诉你,不鼓励使用*导入,更好地明确导入你需要的东西。例外是设计通过* import使用的模块,这意味着它们具有__all__
属性(包含模块要导出的所有内容的名称的列表)。