我正在开发一个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
谢谢!
答案 0 :(得分:4)
不要导入主脚本。直接运行main.py
文件时,它将成为__main__
模块。然后,当您导入main
时,它会找到相同的文件(main.py
),但会在不同的模块对象下添加第二次( main
代替__main__
。)
解决方案是不要这样做。不要将要导出的内容“导出”到主脚本中的其他模块。它不会正常工作。把它们放在第三个模块中。或者,将它们作为参数传递给您正在调用的函数和类。
答案 1 :(得分:0)
if __name__=='__main__':
的重点是阻止代码在导入模块时运行。因此,当您从main
导入screen
时,该部分不会运行且列表保持不变,并且永远不会调用play()
。