完整的代码在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循环永远不会终止?
答案 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。