OOP&语法 - Ex 43 - 艰难学习Python

时间:2018-05-09 05:41:29

标签: python function class oop

我是编码和全新菜鸟的新手。我一直很喜欢Zed Shaw的书“学习Python 3艰难之路” - 但是当我参加这个练习和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')

问题3:这两行中有很多事情发生(Map类也参与其中)......这究竟是什么意思?

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

问题4:我得到了“while”的一部分......但后来我对这两行“next_scene_name = ...”和“current_scene = ...”感到困惑,就像播放函数中的行一样,我很想知道专家编码员如何阅读这篇文章。

      current_scene.enter()

问题5:我相信这是启动动作的代码的核心......但是它如何与每个场景结束时返回的值(可能导致下一个场景)相互作用?每个场景都以“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

见Q2 ......

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

问题6:我理解当调用此函数时,它会从场景['scene_name']返回键的值 - 但实际上首先调用了这个next_scene函数?当'val'返回时,它会在哪里?

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

问题7:由于a_map被定义为带有参数'central_corridor'的类Map,我得知这是“返回self.next_scene('central_corridor')”......但之后我再次迷路了!这到底是什么意思?

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

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

就是这样!我知道这很多 - 而且我理解人们是否想要成为一个菜鸟,但我真的想要理解OOP,我很难理解它。

1 个答案:

答案 0 :(得分:0)

即使我在学习OOPS时也遇到了同样的问题艰难学习Python 所以我建议你从交互式Python 学习OOPS。

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

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