努力学习 python 例 43。句法
Learn python hard way ex.43. Syntax
本练习中有关语法的快速问题;我尝试搜索它,认为它会是一个热门问题,但没有任何结果!所以我可能只是感到困惑。无论如何看下面的代码摘录:
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)
# be sure to print out the last scene
current_scene.enter()
class Map(object):
scenes = {
'central_corridor': CentralCorridor(),
'laser_weapon_armory': LaserWeaponArmory(),
'the_bridge': TheBridge(),
'escape_pod': EscapePod(),
'death': Death(),
'finished': Finished(),
}
def __init__(self, start_scene):
self.start_scene = start_scene
def next_scene(self, scene_name):
val = Map.scenes.get(scene_name)
return val
def opening_scene(self):
return self.next_scene(self.start_scene)
a_map = Map('central_corridor')
a_game = Engine(a_map)
a_game.play()
play()
不会产生如下语法:
current_scene = CentralCorridor().enter()
我的意思是代码可以工作,但我相信为了让代码工作,语法应该是
current_scene = CentralCorridor.enter()
当谈到 key/values 作为函数时,我是否忽略了什么?
提前谢谢大家!
看CentralCorridor
里面enter
的定义。如果 enter
有第一个参数(按照惯例,称为 self,但实际上可以命名为任何名称),那么您需要传入一个参数。
在 Python 中,当 class 的 实例 调用 class 的方法时,它隐式传递了对自身的引用作为第一个位置参数。
因此,对于像 CentralCorridor.enter()
这样的调用,您传递了 0 个参数,您将得到一个 TypeError
表示您缺少一个必需的位置参数。通过像 CentralCorridor().enter()
这样的调用,您隐含地将您创建的新实例作为第一个参数传递给方法 enter
。这只是shorthand的一种写法:
CentralCorridor.enter(CentralCorridor())
本练习中有关语法的快速问题;我尝试搜索它,认为它会是一个热门问题,但没有任何结果!所以我可能只是感到困惑。无论如何看下面的代码摘录:
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)
# be sure to print out the last scene
current_scene.enter()
class Map(object):
scenes = {
'central_corridor': CentralCorridor(),
'laser_weapon_armory': LaserWeaponArmory(),
'the_bridge': TheBridge(),
'escape_pod': EscapePod(),
'death': Death(),
'finished': Finished(),
}
def __init__(self, start_scene):
self.start_scene = start_scene
def next_scene(self, scene_name):
val = Map.scenes.get(scene_name)
return val
def opening_scene(self):
return self.next_scene(self.start_scene)
a_map = Map('central_corridor')
a_game = Engine(a_map)
a_game.play()
play()
不会产生如下语法:
current_scene = CentralCorridor().enter()
我的意思是代码可以工作,但我相信为了让代码工作,语法应该是
current_scene = CentralCorridor.enter()
当谈到 key/values 作为函数时,我是否忽略了什么?
提前谢谢大家!
看CentralCorridor
里面enter
的定义。如果 enter
有第一个参数(按照惯例,称为 self,但实际上可以命名为任何名称),那么您需要传入一个参数。
在 Python 中,当 class 的 实例 调用 class 的方法时,它隐式传递了对自身的引用作为第一个位置参数。
因此,对于像 CentralCorridor.enter()
这样的调用,您传递了 0 个参数,您将得到一个 TypeError
表示您缺少一个必需的位置参数。通过像 CentralCorridor().enter()
这样的调用,您隐含地将您创建的新实例作为第一个参数传递给方法 enter
。这只是shorthand的一种写法:
CentralCorridor.enter(CentralCorridor())