我不明白腳本如何獲得下一個房間,以及「引擎」和「地圖」類的工作方式。這裏是摘錄:Learn Python the 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)
我簡直不明白這些部分是如何工作的。我知道類和對象實例和屬性以及所有其他OOP東西是如何工作的,但由於某些原因,我沒有得到這部分代碼。主要是Map類。如果有人能解釋它,那將是非常棒的。
另外(這可能需要閱讀練習),爲什麼需要這兩個類?難道你不能只用類方法來完成它(即沒有自身作爲參數的方法)?然後你可以調用,例如CentralCorridor.enter()。事實上,我在閱讀答案之前就已經解決了這個問題,結果很好。
對不起,我的主要問題是Engine和Map類是如何工作的。另一件事是次要的。
在此先感謝!
沒有閱讀練習,我會說這些類肯定不是*必需的*來解決問題*一般*。這是有人做出的設計決定。你可能選擇了不同的設計,甚至可能選擇了一個完全不涉及OOP的設計。設計可以是好還是壞,好或壞。在設計解決方案時,您可以遵循一些原則,例如[*關注分離*](http://en.wikipedia.org/wiki/Separation_of_concerns)。 –
我相信這是一個糟糕的類使用的例子。 'Map'可以被其'scenes'屬性取代。另外很顯然'Engine'類不應該是一個類。任何只有'__init__' +一個方法的類實際上是一種編寫函數的複雜方式。 – Bakuriu
我還沒有看過這個練習來自哪個網站,但是使用一個類可能會使它更合適。畢竟,這就是所謂的「Learn Python the Hard Way」:) –