Python 2.7 名称';Start()';未定义

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.

我有两个文件在一个游戏中,我目前正在制作(未完成)。它们是同一个目录。当我运行这两个文件中的任何一个时,macos Serria中的终端给了我这个错误(是的,我做了研究,但没有结果)。顺便说一句,感谢StackOverFlow回答(并在需要时向下投票)问题。它确实帮助了我

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()