学习python艰难的方法ex.43。句法

时间:2015-03-25 19:00:20

标签: python class oop dictionary 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()

当关键/值作为函数时,我是否会忽视某些内容?

先谢谢你们!

1 个答案:

答案 0 :(得分:0)

查看enterCentralCorridor的定义。如果enter有一个第一个参数(按照惯例,称为self,但可以真正命名),那么你需要传入一个参数。

在Python中,当类的实例调用类的方法时,它会隐式地将对自身的引用作为第一个位置参数传递。

所以通过像CentralCorridor.enter()之类的调用,你传递0个参数,你会得到一个TypeError,说你缺少一个必需的位置参数。通过像CentralCorridor().enter()这样的调用,您可以将创建的新实例作为方法enter的第一个参数隐含地传入。这只是一种写作的简写方式:

CentralCorridor.enter(CentralCorridor())