【发布时间】:2020-07-04 13:29:44
【问题描述】:
作为Python documentation states,模块导入(以及从模块中导入)总是在执行可能的父模块。例如这些构成常规包的文件:
a_package/
__init__.py
a_submodule.py
从a_submodule 在完全不同的包中导入,例如
from a_package.a_submodule import an_object
将首先执行a_package/__init__.py,然后再执行a_package/a_submodule.py,并最终将an_object绑定到声明导入的命名空间中。
我想知道这背后的设计原理或技术必要性是什么。特别是因为这对我来说似乎违反直觉,因为通常的包制度是一个有序图,其中父模块取决于其子包中的内容,反之亦然。事实上,如果该 import 语句示例在 a_package/__init__.py 中进行了评估,它不会触发自身的执行。当然,因为这是一个循环依赖,但它表明子模块不依赖于它们的父模块。
【问题讨论】:
标签: python python-3.x python-module