笨方法学python ex43_困惑关于类在学习Python的硬的方式ex43?

I'm confused on how the Map and Engine classes together work together to run this Adventureland type game (full code here: http://learnpythonthehardway.org/book/ex43.html). I think I understand what is happening in the Map class, but I'm really confused about what is happening in Engine() and why the scene_map variable is needed.

class Map(object):

scenes = {

'central_corridor': CentralCorridor(),

'laser_weapon_armory': LaserWeaponArmory(),

'the_bridge': TheBridge(),

'escape_pod': EscapePod(),

'death': Death()

}

def __init__(self, start_scene):

self.start_scene = start_scene

def next_scene(self, scene_name):

return Map.scenes.get(scene_name)

def opening_scene(self):

return self.next_scene(self.start_scene)

class Engine(object):

def __init__(self, scene_map):

self.scene_map = scene_map

def play(self):

current_scene = self.scene_map.opening_scene()

while True:

print "\n--------"

next_scene_name = current_scene.enter()

current_scene = self.scene_map.next_scene(next_scene_name)

a_map = Map('central_corridor')

a_game = Engine(a_map)

a_game.play()

Thank you for any help.

解决方案

The Engine instance's scene_map is an instance of the Map class, just as the global a_map is. In fact, a_game.scene_map is the same instance as a_map.

So, whatever you could do with a_map at the top level, the Engine.play code can do with self.scene_map. It may be worth typing everything into the interactive interpreter up to the a_map definition and playing around with a_map to make sure you know what exactly it can do for you.

So, why does Engine need self.scene_map? Why can't it just use the global a_map?

Well, it could. The problem is that if you did that, you wouldn't be able to create two Engine instances without them fighting over the same a_map. (This is the same reason you don't want to use global variables in functions. Objects don't add a new problem—in fact, a big part of what objects are about is solving the global-variables problem.)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值