为什么我不能使用另一个Finished()值而不是在LPTHW Ex 43中调用.next_scene()?

时间:2017-05-17 08:33:28

标签: python python-2.7

完整的代码在http://learnpythonthehardway.org/book/ex43.html

我的主要问题是以下代码的一部分:

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

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

        current_scene.enter()

我很困惑,为什么我不能像self.scene_map.next_scene('finished')一样用这样的方式替换Finished()

last_scene = Finished()

当我替换它时,while循环永远不会终止?

1 个答案:

答案 0 :(得分:0)

Scene基类没有定义自定义相等性测试,因此current_scene != last_scene回退到默认值:测试两个引用是否指向同一个对象。

您创建了一个 Finished()实例,总是与其他Finished()个实例不相等,包括{{ 1}}返回:

self.scene_map.next_scene(next_scene_name)

我必须注意,我强烈建议不要使用以艰难的方式学习Python 来学习Python。它只教授Python 2,它现在是维护模式中语言的遗留版本仅仅几年,并且有a long list of other issues

相反,你会更好地学习一本教授Python 3的书。请参阅these alternatives