Python模块在另一个模块中将完整列表视为空

时间:2010-04-12 22:58:09

标签: python import module

我正在开发一个pygame项目并且主引擎已经布局了。问题是我遇到了一个我似乎无法弄清楚的错误。发生的事情是一个模块无法从另一个模块读取变量。

不是因为变量无法读取,它只是看到一个空列表而不是它真正的列表。

我没有发布整个源代码,而是将错误复制到两个小片段中,这些片段希望一个熟练的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

谢谢!

2 个答案:

答案 0 :(得分:4)

不要导入主脚本。直接运行main.py文件时,它将成为__main__模块。然后,当您导入main时,它会找到相同的文件(main.py),但会在不同的模块对象下添加第二次main代替__main__。)

解决方案是不要这样做。不要将要导出的内容“导出”到主脚本中的其他模块。它不会正常工作。把它们放在第三个模块中。或者,将它们作为参数传递给您正在调用的函数和类。

答案 1 :(得分:0)

if __name__=='__main__':的重点是阻止代码在导入模块时运行。因此,当您从main导入screen时,该部分不会运行且列表保持不变,并且永远不会调用play()