Python 导入在同一模块中定义的类

Python 导入在同一模块中定义的类,python,Python,我在使用模块中定义的类时遇到问题。我已经看过了,答案似乎是“你不需要进口。”这绝对不是我正在经历的行为。我正在使用Python 3.3。以下是我的目录结构: root/ __init__.py mlp/ __init__.py mlp.py layers/ __init__.py hidden_layer.py dropout_layer.py 我的问题是:d

我在使用模块中定义的类时遇到问题。我已经看过了,答案似乎是“你不需要进口。”这绝对不是我正在经历的行为。我正在使用Python 3.3。以下是我的目录结构:

root/
    __init__.py
    mlp/
        __init__.py
        mlp.py
        layers/
            __init__.py
            hidden_layer.py
            dropout_layer.py
我的问题是:
dropout\u layer.py
中定义的类扩展了
hidden\u layer.py
中的类,但当我尝试导入hidden\u layer时,有时会根据执行代码的目录发生错误。例如,
from layers.hidden\u layer导入HiddenLayer
,然后如果我从
root/mlp
执行代码,则运行代码。但是,如果从
根目录执行代码,则此导入不起作用。这对我来说是奇怪的行为。我怎样才能使它正常工作

我唯一的非空
\uuuu init\uuuu.py
文件位于
根/mlp/layers/
中:

# root/mlp/layers/__init__.py
__all__ = ['hidden_layer', 'dropout_layer']

在Python 3中,可以为相对于当前模块位置的导入预先添加

from .hidden_layer import HiddenLayer

如果从根目录执行,则必须从mlp.layers.hidden_layer导入HiddenLayerIt对我来说似乎有点愚蠢,因为导入是相对于我执行代码的位置进行的,特别是因为类位于同一个模块中。幸运的是,dmau有一个很好的答案。@Max:模块就是一个文件。如果类位于不同的文件中,则它们不在同一模块中。看起来你的文件在同一个包里。很酷,工作得很有魅力。对我来说很奇怪,@Max中没有提到这一点:这些文档用于导入系统的内部。在中介绍了
import
语句本身。您也可以在2.6中使用
from\uuuuuu future\uuuuuu导入绝对值\uu import
启用此功能。