我们有一个结构如下的软件包:
ParentDirectory/
Able/
__init__.py
Baker/
__init__.py
stuff.py
Charlie/
__init__.py
things.py
和PYTHONPATH中的ParentDirectory一起,Charlie以常规方式导入:
from Able.Baker import Charlie
我的一位同事希望使PYTHONPATH包含“ ParentDirectory;ParentDirectory/Able;ParentDirectory/Able/Baker
”,以便他们可以直接导入Baker和Charlie,就像它们是顶级的一样:
import Able
import Baker
import Charlie
这会破坏一切吗?
(对我来说,这似乎是一种不好的做法,但我无法明确说明其不好的具体原因。)
答案 0 :(得分:3)
这绝对会破坏事情。如果这样做,Baker
和Charlie
将是与Able.Baker
和Able.Baker.Charlie
不同的模块。导入Baker
和Able.Baker
将运行两次模块初始化。您将有两个类的副本(以及函数和大多数其他东西,但是对于类来说效果更糟)。您将中断相对导入,因为Baker
和Charlie
将是顶级的,而不是包内的。这是一个可怕的主意。