2010-04-12 3 views
0

파이 게임 프로젝트에서 주 엔진을 배치했습니다. 문제는 내가 알아낼 수없는 버그에 부딪쳤다는 것입니다. 어떤 모듈이 다른 모듈의 변수를 읽을 수 없게됩니다.다른 모듈에서 전체 목록을 비어있는 것으로 보는 파이썬 모듈

변수를 읽을 수 없다는 것이 아니라 실제 목록 대신 빈 목록을 볼 수 있습니다.

전체 소스 코드를 게시하는 대신이 버그를 두 개의 작은 발췌 문장으로 재현하여 숙련 된 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

0

if __name__=='__main__':의 전체 점은 이며, 모듈을 가져올 때 코드가 실행되는 것을 방지합니다. 따라서 mainscreen에서 가져 오면 해당 부분이 실행되지 않고 목록이 empt 상태로 유지되고 play()도 호출되지 않습니다.

관련 문제