首页 > 解决方案 > OOP 和语法 - Ex 43 - 艰难地学习 Python

问题描述

我是编码新手,完全是菜鸟。我一直非常喜欢阅读 Zed Shaw 的书“Learn Python 3 the Hard Way”——但是当我开始这个练习和 OOP 时,突然一切都变得毫无意义了。

我真的需要一些更有经验的人的帮助,了解如何将这段代码实际翻译成“英文”,这样我就可以了解它在做什么......并且理想情况下也能弄清楚如何编写这样的代码。

Stack Overflow上还有另一篇类似的帖子——但我真的希望有慷慨的人可以和我一起深入了解一下,这也将证明对其他在 OOP 中苦苦挣扎的菜鸟有益。

我已经逐行列出了我的问题......我认为到目前为止,有人可以做的最有帮助的事情之一就是和我一起检查这段代码的语法。我试图从一个序列的角度来考虑它:(1) xyz 被输入 (2) abc 发生 (3) efg 被返回....但是有太多的嵌套关系让我无法解析它更有经验的人的帮助。

class Scene(object):

  def enter(self):
      print("This scene is not yet configured.")
      print("Subclass it and implement enter().")
      exit(1)

Q1:这些行仅用于调试目的,对吗?

class Engine(object):

  def __init__(self, scene_map):
      self.scene_map = scene_map

Q2:我的麻烦从 OOP 开始。如何直观地理解“init”以及如何使用它?我认为 'self' = 'a_game'... 但是这一行 self.scene_map = scene_map 在其余代码的上下文中甚至做了什么?

  def play(self):
      current_scene = self.scene_map.opening_scene()
      last_scene = self.scene_map.next_scene('finished')

Q3:这两行发生了很多事情(也涉及到 Map 类)......这到底是什么意思?

      while current_scene != last_scene:
          next_scene_name = current_scene.enter()
          current_scene = self.scene_map.next_scene(next_scene_name)

Q4:我得到了这个的“while”部分......但是我对接下来的两行“next_scene_name = ...”和“current_scene = ...”感到困惑,就像播放函数中的行一样,我会喜欢了解专业编码人员如何阅读此内容。

      current_scene.enter()

Q5:我相信这是启动动作的代码的核心……但这与每个场景结束时返回的值(可能会导致下一个场景)如何交互?每个场景都以“return 'xyz'”结尾——我不明白这怎么够。

class CentralCorridor(Scene):

  def enter(self):
      # print story-line here...
      action = input("> ")

      if action == "xyz":
          return 'laser_weapon_armory'
      # rest omitted...

class LaserWeaponArmory(Scene):

  def enter(self):
      # action & choices go here...

  return 'xyz'

class Map(object):

  scenes = {
  'central_corridor': CentralCorridor(),
  'laser_weapon_armory': LaserWeaponArmory(),
  # more...
  }

  def __init__(self, start_scene):
      self.start_scene = start_scene

见第二季度...

  def next_scene(self, scene_name):
      val = Map.scenes.get(scene_name)
      return val

Q6:我知道调用这个函数的时候,它会从scene['scene_name']返回key的值——但是到底是什么调用了这个next_scene函数呢?当返回“val”时,它要去哪里?

  def opening_scene(self):
      return self.next_scene(self.start_scene)

Q7:由于 a_map 被定义为带有参数 'central_corridor' 的类 Map,我知道这是在说“return self.next_scene('central_corridor')”……但在那之后我又迷路了!这到底是什么意思?

a_map = Map('central_corridor')
a_game = Engine(a_map)
a_game.play()

我理解这些最后几行......但是,一旦我开始将它们重新插入到其余代码中,我很快就会迷失方向。

而已!我知道这很多——而且我理解人们是否会因为我是一个菜鸟而反对我,但我真的很想了解 OOP,而且要弄清楚它对我来说非常具有挑战性。

标签: pythonfunctionclassoop

解决方案


即使我在通过Learn Python the Hard Way学习 OOPS 时也遇到了同样的问题,所以我建议你从Interactive Python学习 OOPS 。

http://interactivepython.org/runestone/static/pythonds/Introduction/ObjectOrientedProgramminginPythonDefiningClasses.html

一旦你熟悉了 OOPS 概念,你就可以继续学习 Python the Hard Way。我希望它对你有帮助。这不是您问题的答案,但我没有足够的代表发表评论。


推荐阅读