对Python子子包感到困惑

4 投票
1 回答
1121 浏览
提问于 2025-04-17 06:51

正如标题所说,我对子子包有点困惑。我的包结构如下:

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 的方式)来解决这个循环导入的问题。

撰写回答