Я новичок в кодировании и абсолютный нуб. Мне действительно очень нравилось читать книгу Зеда Шоу «Изучай Python 3 трудным путем» - но когда я добрался до этого упражнения и ООП, внезапно все перестало иметь смысл.
Мне действительно нужна помощь от кого-то более опытного в том, как на самом деле перевести этот код "на английский", чтобы я мог следить за тем, что он делает ... и в идеале выяснить, как писать код, подобный этому.
Есть еще один подобный пост на Переполнение стека - но я действительно надеюсь, что кто-то щедрый там сможет углубиться со мной и что это также окажется полезным для других новичков, борющихся с ООП ,
Я включил свои вопросы построчно ... Я думаю, что одна из самых полезных вещей, которые кто-либо может сделать, это пересмотреть синтаксис этого кода со мной. Я пытаюсь думать об этом с точки зрения последовательности: (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)
В1: Эти строки здесь только для целей отладки, верно?
class Engine(object):
def __init__(self, scene_map):
self.scene_map = scene_map
Q2: Моя проблема начинается здесь с ООП. Как я могу интуитивно понять «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)
Q4: я получаю часть "while" этого ... но потом меня смущают следующие две строки "next_scene_name = ..." и "current_scene = ..." Как строки из функции play, Я хотел бы знать, как это читает опытный программист.
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
См. 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)
Q7: так как a_map определен как класс Map с параметром 'central_corridor', я получаю, что это говорит "return self.next_scene ('central_corridor')" "... но после этого я снова потерялся! Что это на самом деле переводит?
a_map = Map('central_corridor')
a_game = Engine(a_map)
a_game.play()
Эти последние строки я понимаю ... но, опять же, как только я начинаю вставлять их обратно в остальную часть кода, я довольно быстро теряюсь.
Вот и все! Я знаю, что это много - и я понимаю, что если люди захотят понизить меня за то, что я нуб, но я действительно хочу понять ООП, и мне было довольно сложно понять это.