python - 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,而且要弄清楚它对我来说非常具有挑战性。
解决方案
即使我在通过Learn Python the Hard Way学习 OOPS 时也遇到了同样的问题,所以我建议你从Interactive Python学习 OOPS 。
http://interactivepython.org/runestone/static/pythonds/Introduction/ObjectOrientedProgramminginPythonDefiningClasses.html
一旦你熟悉了 OOPS 概念,你就可以继续学习 Python the Hard Way。我希望它对你有帮助。这不是您问题的答案,但我没有足够的代表发表评论。
推荐阅读
- python - Django反向外键导致重复查询
- python - 如何检查X,Y坐标是否在python中的矩形范围内
- python - 覆盖 Pydantic 中子类的字段别名
- javascript - 在 React js 中如何将输入值传递给当前组件中的 API 参数
- javascript - 嘿,谁能解释一下这行代码?
- reactjs - 为什么我的状态没有在 reactjs 中正确呈现?
- spring - 将千分尺集成到 GeoServer
- junit - 具有许多实体的 hsqldb
- php - 通过 powershell 将文件从 Windows 上传到 Kali
- fonts - 如何使用 KDE 桌面在 Arch Linux 上查看字体文件?