不同目录下的不同导入结果


问题内容

我有一个包MyPak和一个模块MyMod。这些文件的组织方式如下:

somedir / MyPak / MyMod.py

在MyMod.py中,只有一个名称也为MyMod的类

somedir / MyPak 目录中,如果我执行导入操作:

import MyMod

我将MyMod作为模块导入。

但是在 somedir / 目录中,如果我这样做

from MyPak import MyMod

我将MyMod作为类而不是模块导入。为什么会这样呢?


问题答案:

此行为表明您有一个文件:

somedir/MyPak/__init__.py

其中,您执行以下操作:

from MyMod import *

当您import MyPak从中导入时,__init__.py同样地,当您from MyPak import something尝试从包的名称空间中提取时,它会在其中__init__.py

因为您是从MyModinside导入所有内容的__init__.py,所以现在该类在MyPak包中是本地的,并屏蔽了MyMod.py文件。