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