Python 2.7 名称';Start()';未定义
我有两个文件在一个游戏中,我目前正在制作(未完成)。它们是同一个目录。当我运行这两个文件中的任何一个时,macos Serria中的终端给了我这个错误(是的,我做了研究,但没有结果)。顺便说一句,感谢StackOverFlow回答(并在需要时向下投票)问题。它确实帮助了我Python 2.7 名称';Start()';未定义,python-2.7,Python 2.7,我有两个文件在一个游戏中,我目前正在制作(未完成)。它们是同一个目录。当我运行这两个文件中的任何一个时,macos Serria中的终端给了我这个错误(是的,我做了研究,但没有结果)。顺便说一句,感谢StackOverFlow回答(并在需要时向下投票)问题。它确实帮助了我 File "story.py", line 3, in <module> from engine import * File "SurvivalAdventureGame/Resources/engine.
File "story.py", line 3, in <module>
from engine import *
File "SurvivalAdventureGame/Resources/engine.py", line 2, in <module>
from story import *
File "SurvivalAdventureGame/Resources/story.py", line 5, in <module>
class Start(Scene):
NameError: name 'Scene' is not defined
这里是engine.py:
from sys import exit
from story import *
class Scene(object):
def __init__(self):
start()
def start(self):
print "DOESNOTEXIST!"
exit(1)
class Engine(object):
def __init__(self, scene_map):
self.scene_map = scene_map
def play(self):
current_scene = self.scene_map.opening_scene()
while True:
print "\n--------"
next_scene_name = current_scene.start()
current_scene = self.scene_map.next_scene(next_scene_name)
class Map(object):
# Won't work now, Gotta finish writing the story!
scenes = {
"Start": Start(),
"Day1": Day1(),
"Day2": Day2(),
"Day3": Day3(),
"Day4": Day4(),
"Day5": Day5(),
"Day6": Day6(),
"Day7": Day7(),
"Day8": Day8(),
"Death": Death(),
"Stupid": Stupid(),
}
def __init__(self, start_scene):
self.start_scene = start_scene()
def next_scene(self, scene_name):
return Map.scenes.get(scene_name)
def opening_scene(self):
return self.next_scene(self.start_scene)
class play(object, Map):
def __init__(self, map):
the_map = Map('Start')
the_map = Engine(the_map)
a_game.play()
看起来您有一个循环依赖关系:在故事中,您从引擎导入*(所有内容),反之亦然。这在Python中不受支持。看起来您有一个循环依赖关系:在故事中,您从引擎导入*(所有内容),反之亦然。Python不支持这一点。Python不支持这样的递归导入。在定义
场景
之前,您已经从story import*中获得了,但它无法做到这一点,因为某些内容依赖于尚未定义的场景
。Python不支持这样的递归导入。在定义场景
之前,您有来自story import*
的,但由于某些内容依赖于尚未定义的场景
,因此无法执行此操作。请详细说明导入的替代方法*。谢谢@AbdiDhago您不是在寻找导入的替代方案*
您是在寻找一种设计变更,它消除了循环依赖的需要。一个解决方案是将公共逻辑提取到第三个文件中,并在引擎和故事中使用它(从中导入*),明白了吗。谢谢请详细说明导入*的替代方案。谢谢@AbdiDhago您不是在寻找导入的替代方案*您是在寻找一种设计变更,它消除了循环依赖的需要。一个解决方案是将公共逻辑提取到第三个文件中,并在引擎和故事中使用它(从中导入*),明白了吗。谢谢
from sys import exit
from story import *
class Scene(object):
def __init__(self):
start()
def start(self):
print "DOESNOTEXIST!"
exit(1)
class Engine(object):
def __init__(self, scene_map):
self.scene_map = scene_map
def play(self):
current_scene = self.scene_map.opening_scene()
while True:
print "\n--------"
next_scene_name = current_scene.start()
current_scene = self.scene_map.next_scene(next_scene_name)
class Map(object):
# Won't work now, Gotta finish writing the story!
scenes = {
"Start": Start(),
"Day1": Day1(),
"Day2": Day2(),
"Day3": Day3(),
"Day4": Day4(),
"Day5": Day5(),
"Day6": Day6(),
"Day7": Day7(),
"Day8": Day8(),
"Death": Death(),
"Stupid": Stupid(),
}
def __init__(self, start_scene):
self.start_scene = start_scene()
def next_scene(self, scene_name):
return Map.scenes.get(scene_name)
def opening_scene(self):
return self.next_scene(self.start_scene)
class play(object, Map):
def __init__(self, map):
the_map = Map('Start')
the_map = Engine(the_map)
a_game.play()