我是编码和全新菜鸟的新手。我一直很喜欢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,我很难理解它。
答案 0 :(得分:0)
即使我在学习OOPS时也遇到了同样的问题艰难学习Python 所以我建议你从交互式Python 学习OOPS。
http://interactivepython.org/runestone/static/pythonds/Introduction/ObjectOrientedProgramminginPythonDefiningClasses.html
熟悉OOPS概念后,您可以继续学习Python。我希望它对你有所帮助。这不是你问题的答案,但我没有足够的代表发表评论。