2013-05-15 171 views
1

我在導入一系列模塊和訪問類時遇到了問題。從python模塊中導入子類

這是我的代碼:

import sys, os 
for path, name, files in os.walk(os.getcwd()[:os.getcwd().rindex("Mario")+5]): 
    sys.path.insert(0, os.path.join(path)) 
from pygame.locals import * 
import pygame, Screen 

WIDTH, HEIGHT = SIZE = 1200, 675 
running = True 
screen = pygame.display.set_mode(SIZE, SRCALPHA) 
current = None 
screen_menu = Screen.Menu().add_widget(Widget.Button(WIDTH/2-25, HEIGHT/2-25, 50, 30)) 

當運行我得到:

Traceback (most recent call last): 
    File "I:\Computing\Python\Mario\Global.py", line 5, in <module> 
    import pygame, Screen 
    File "I:\Computing\Python\Mario\screen\Screen.py", line 5, in <module> 
    import pygame, Global 
    File "I:\Computing\Python\Mario\Global.py", line 11, in <module> 
    screen_menu = Screen.Menu().add_widget(Widget.Button(WIDTH/2-25, HEIGHT/2-25, 50, 30)) 
AttributeError: 'module' object has no attribute 'Menu' 
[Finished in 2.9s with exit code 1] 

有沒有人對爲什麼會這樣,我已經導入它和菜單任何想法,只是中的類屏幕,如果需要,我可以給你屏幕類!

+0

'Import Screen.Menu' – Blender

+0

@Blender很遺憾,我試過了,它說'ImportError:沒有名爲Menu的模塊' –

+0

在運行時修改'sys.path'通常是一個錯誤。它使你的代碼環境相關。導入路徑的任何更改都應該在環境中進行,並且有很多系統可以執行此操作。 –

回答

3

您有循環依賴關係 - Screen使用GlobalGlobal使用Screen。修改你的代碼,不要有任何循環導入。

+0

這是否會解決問題,還是隻是一個好的編程,我還用'循環'導入來以我最初開始學習Java時易於閱讀的方式佈局我的代碼:) –

+0

循環導入總是反映一個次優設計,並且會導致像你在這裏看到的錯誤。如果你看不到這個問題是由你的循環進口引起的(這是),那就更強烈地支持避免它們的需要。 –

+0

這樣做的竅門,謝謝,我將在未來銘記這一點! :d –