我会尽力解释它是如何工作的。
首先,这是运行:
a_game = Game("central_corridor")
这就要求Game.__init__("central_corridor")
。
在__init__方法中,self.start
取值 “central_corridor”。
然后我们回到主体。到目前为止,我们有一个变量叫做a_game
。这个变量实际上是类Game
的一个实例,它有一些属性,如a_game.start
,a_game.quips
,a_game.death()
等
其次,这是运行:
a_game.play()
这就要求在a_game
的play()
方法。不在Game
,但在a_game
。因此,当该方法运行时,它可以通过self
(这看起来像一个常规参数)这个词访问a_game
的所有属性。
这是下一个运行
next = self.start
self.start
在__init__()
定义,并且是等于 “central_corridor”。所以现在,next
是“central_corridor”。
我们进入while True:
循环,打印一些hypens,并调用getattr()
。
getattr()
至少需要两个参数。第一个是对象的intsance,在这种情况下self
,以及第二个是该实例的属性的名称。在这种情况下"central_corridor"
。
因此,getattr寻找称为“central_corridor”的自我属性,并找到它并返回它。现在,room
等于self.central_corridor
。
接下来,运行next = room()
。由于房间当前等于self.central_corridor
,因此:
next = self.central_corridor()
实际运行。
self.central_corridor()
可以返回 “死亡”, “laser_weapon_armory” 或 “central_corridor” 之一。假设它返回“laser_weapon_armory”。现在next
是“laser_weapon_armory”。我们回到循环的开始。我们再次打印一些连字符,得到一个名为“laser_weapon_armory”的自我属性,它恰好是self.laser_weapon_armory
,并运行它。
self.laser_weapon_armory
可以返回“the_bridge”或“death”。这一次让我们说它返回“死亡”。现在next
是“死亡”。我们回到循环的开始部分,打印一些超版本,获得self.death
,并运行它。
全部self.death
确实是打印从self.quips,然后exit(1)
随机字符串。 exit
函数来自sys
模块,就是这样做的。它终止程序。
这就是它。我希望这有助于。
祝你好运学习Python的艰辛路!
你真的在学习Python这个难题。 ;-)我建议使用官方的[教程](http://docs.python.org/tutorial/)。 – Keith
@Keith我不同意。困难的方式更容易;)。 –