2010-04-12 74 views
0

我正在開發一個pygame項目並且已經佈置了主引擎。問題是我遇到了一個我似乎無法弄清楚的錯誤。發生什麼事是一個模塊不能從另一個模塊讀取變量。Python模塊在另一個模塊中看到完整列表爲空

這不是變量不能被讀取,它只是看到一個空的列表,而不是它真的是什麼。

我沒有發佈整個源代碼,而是在兩個小片段中重現了這個錯誤,希望有一個熟練的python-ist可以在他的頭上解釋。

代碼:

main.py(這是獲取運行該文件) 導入屏幕

screens = [] #A stack for all the game screens 

def current_screen(): 
    #return a reference to the current screen 
    return screens[-1] 

def play(): 
    print'play called' 
    current_screen().update() 

if __name__=='__main__': 
    screens.append(screen.Screen()) 
    play() 

screen.py

import main 

class Screen: 
    def __init__(self): 
     print'screen made' 
    def update(self): 
     print main.screens 
     #Should have a reference to itself in there 

謝謝!

回答

4

請勿導入主腳本。當您直接運行main.py文件時,它將成爲__main__模塊。當您再導入main,它會找到相同的文件(main.py),但加載第二次,一個不同的模塊對象下(main而不是__main__。)

的解決方案是無法做到這一點。不要將想要「導出」的內容放在主腳本的其他模塊中。它不會正常工作。把它們放在第三個模塊中。或者,將它們作爲參數傳遞給您所調用的函數和類。

+0

啊,現在有很多意義。非常感謝你的幫助! – Nick 2010-04-13 02:45:04

0

if __name__=='__main__':的整點阻止代碼從導入模塊時運行。因此,當您從screen導入main時,該部分未運行且列表保持空白狀態,並且從不會調用play()

相關問題