对Python子子包感到困惑
正如标题所说,我对子子包有点困惑。我的包结构如下:
draw \
__init__.py
base \
__init__.py
utils.py
events.py
master.py
basegui.py
现在,draw.base.events
的第一行是:
import draw.base.utils as _utils
而draw.base
的第一行是:
from draw.base.events import Event, RenderEvent, InputEvent, MouseEvent, KeyboardEvent
我正在用IDLE检查代码是否有语法错误:
import draw.base as base
结果出现了以下的AttributeError
错误:
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import draw.base
File "Z:\Eigene Dateien\Eigene Dokumente\Python\draw\base\__init__.py", line 4, in <module>
import draw.base.events as events
File "Z:\Eigene Dateien\Eigene Dokumente\Python\draw\base\events.py", line 10, in <module>
import draw.base.utils as _utils
AttributeError: 'module' object has no attribute 'base'
有人能给我解释一下问题出在哪里吗?
1 个回答
2
为了在 draw.base.events
中导入 draw.base.utils
,Python 需要先导入 draw.base
,但现在 draw.base
还没有被导入,所以会出现问题。你可以把 import draw.base.utils
改成 import utils
(在 Python 2.7 和 3.x 中,你也可以使用类似 from ..base import utils
或者 from __future__ import absolute_import
的方式)来解决这个循环导入的问题。