1

モジュールにいくつかのコードがあります

import pygame
from pygame.locals import *

import reusable

from state import state

class TitleState(state.State):
    def __init__(self):
        #Create data batches
        self.soundbatch = reusable.resourceloader.ResourceBatch(path="data/sound", type="ogg")
        self.imagebatch = reusable.resourceloader.ResourceBatch(path="data/image", type="tga")

        #Reusable stuff
        self.inputengine = reusable.inputengine.InputEngine()
        self.mousehandler = reusable.mousehandler.MouseHandler()

    def update(self):
        pygame.event.pump()

しかし、それは私にエラーを与えます

Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\MegaCity\Start.py", line 1, in <module>
    import megacity.megacity
  File "C:\Users\Administrator\Desktop\MegaCity\megacity\megacity.py", line 37, in <module>
    themc = MegaCity()
  File "C:\Users\Administrator\Desktop\MegaCity\megacity\megacity.py", line 25, in __init__
    self.titlestate = titlestate.TitleState()
  File "C:\Users\Administrator\Desktop\MegaCity\state\titlestate.py", line 21, in __init__
    self.inputengine = reusable.inputengine.InputEngine()
AttributeError: 'module' object has no attribute 'inputengine'

ただし、 reusable のディレクトリには確かに「inputengine」が含まれています。

 Directory of C:\Users\Administrator\Desktop\MegaCity\reusable

10/09/2012  05:29 PM    <DIR>          .
10/09/2012  05:29 PM    <DIR>          ..
10/08/2012  09:34 PM             3,920 inputengine.py
10/09/2012  04:54 PM             1,364 mousehandler.py
10/08/2012  09:42 PM               799 resourceloader.py
10/09/2012  05:32 PM                 2 __init__.py
10/09/2012  05:32 PM    <DIR>          __pycache__

しかし、私が行うfrom reusable import inputengineと、問題なくインポートされinputengineます。また、再利用可能なコード__init__.pyを入れると動作します。from . import inputengineこれについての洞察はありますか?

4

1 に答える 1

1

これが動作するはずの方法です (バグではなく、機能です)。

絶対インポートを使用してインポートにパッケージ名を含める必要があります。そうしたくない場合は、見つけたように相対インポートを使用できます(つまりfrom . import inputengine)。

于 2012-10-09T21:41:52.010 に答える