Я не понимаю, как скрипт получает следующую комнату, и вообще как работают классы «Двигатель» и «Карта». Вот выдержка:Учиться Python Hard Way Упражнение 43
Class Map(object):
scenes = {
'central_corridor': CentralCorridor(),
'laser_weapon_armory': LaserWeaponArmory(),
'the_bridge': TheBridge(),
'escape_pod': EscapePod(),
'death': Death()
}
def __init__(self, start_scene):
self.start_scene = start_scene
def next_scene(self, scene_name):
return Map.scenes.get(scene_name)
def opening_scene(self):
return self.next_scene(self.start_scene)
class Engine(object):
def __init__(self, scene_map):
self.scene_map = scene_map
def play(self):
current_scene = self.scene_map.opening_scene()
while True:
print "\n--------"
next_scene_name = current_scene.enter()
current_scene = self.scene_map.next_scene(next_scene_name)
Я просто не понимаю, как работают эти порции. Я знаю, как работают объекты и атрибуты классов и объектов, а также все другие материалы ООП, но по какой-то причине эту часть кода я не получаю. В основном класс карты. Если бы кто-нибудь мог это объяснить, это было бы здорово.
Также (это может потребовать прочтения упражнения), почему требуется иметь эти два класса в любом случае? Не могли бы вы просто сделать это с помощью методов класса (т. Е. Методы без self в качестве параметра)? Тогда вы можете просто позвонить, например, CentralCorridor.enter(). Фактически, именно так я решил это, прежде чем читать ответ, и это получилось прекрасно.
Извините, мой главный вопрос - как работают классы Engine и Map. Другая вещь вторична.
Заранее благодарен!
Без чтения упражнения я бы сказал, что эти классы, конечно, не * необходимы * для решения проблемы * вообще *. Это дизайнерское решение, которое кто-то сделал. Возможно, вы выбрали другой дизайн, возможно, даже тот, который вообще не связан с ООП. Дизайн может быть хорошим или плохим, лучше или хуже. Существует несколько принципов, которым вы можете следовать при разработке решения, например [* разделение проблем *] (http://en.wikipedia.org/wiki/Separation_of_concerns). –
Я считаю, что это пример плохого использования классов. «Карта» может быть заменена атрибутом 'scenes'. Также ясно, что класс 'Engine' не должен быть классом. Любой класс, который имеет только '__init__' + единственный метод, представляет собой сложный способ записи функции. – Bakuriu
Я не смотрел сайт, на котором происходит это упражнение, но использование класса может заключаться в создании основы, где его использование более уместно. Это, в конце концов, называется «Learn Python the Hard Way» :) –