python多实例化和传递值

时间:2014-11-05 05:57:55

标签: python class instantiation

新手问题。有人可以帮我理解下面发生的事吗?

这一切都来自于学习python的难度ex43 - http://learnpythonthehardway.org/book/ex43.html

班级引擎如何知道列表中的第一个“场景”来自Map类? 这种交接发生在哪里?

我也不确定Engine和Map类是如何通信的。我看到它在底部被实例化,但是有可能有一个实例化对象(a_map)然后再次实例化该对象(由a_game)?

示例:

a_map = Map('1')
a_game = Engine(a_map)

这是完整的代码。

class Engine(object):

    def __init__(self, scene_map):
        self.scene_map = scene_map

    def play(self):
        current_scene = self.scene_map.opening_scene()
        last_scene = self.scene_map.next_scene('2')


        while current_scene != last_scene:
            next_scene_name = current_scene.enter()
            current_scene = self.scene_map.next_scene(next_scene_name)


class FristLevel(object):

    def enter(self):
    pass

class SecondLevel(object):

    def enter(self):
    pass

class Map(object):

    scenes = {'1' : FristLevel(),
    '2' : SecondLevel()}

    def __init__(self, start_scene):
        self.start_scene = start_scene


    def next_scene(self, scene_name):
        pass

    def opening_scene(self):
        pass


a_map = Map('1')
a_game = Engine(a_map)
a_game.play()

1 个答案:

答案 0 :(得分:1)

我不确定你的问题是什么,但我会尝试为你分解代码。 。

a_map = Map('1')

这将创建Map的新实例,并将其存储在名称a_map中。

a_game = Engine(a_map)

这将创建Engine的新实例,并将其存储在名称a_game中。请注意,输入参数为a_map。在这种情况下,Map实例将传递给Engine.__init__并存储为scene_map属性。在上面的示例中,如果您要写:

a_game.scene_map is a_map

结果为True,因为它们都是同一个Map实例的名称。