2017-11-06 3 views
-2

私はこの練習に出くわしましたが、いくつかのコードを理解することができませんでした。python難解な方法を説明するエクササイズ:43

まず、フロー制御と混同しています。同じ画面を分割したスクリーンショットを貼り付けました.2番目の画面にはオブジェクト宣言とメソッド呼び出しがあります。スクリーンショットにはコンパイルされた出力もあります。

ここはコードの一部です。

class Engine(object): 
    print 'Inside Engine class' 
    def __init__(self, scene_map): 
     self.scene_map = scene_map 
     print 'scene_map is:',self.scene_map 
    def play(self): 
     print "inside play ",self 
     flag = True 
     current_scene = self.scene_map.opening_scene() 
     if current_scene =="finish": 
      flag = False 
     while flag: 
      print "\n--------" 
      next_scene_name = current_scene.enter() 
      if next_scene_name == "finish": 
       exit(0) 
      else: 
       current_scene = self.scene_map.next_scene(next_scene_name)` 

class Map(object): 
    print "inside map class" 
    scenes = { 
      'central_corridor': CentralCorridor(), 
      'laser_weapon_armory': LaserWeaponArmory(), 
      'the_bridge': TheBridge(), 
      'escape_pod': EscapePod(), 
      'death': Death(), 
      'finish':Finish() 
      } 
    def __init__(self, start_scene): 
     print start_scene 
     self.start_scene = start_scene 
    def next_scene(self, scene_name): 
     return Map.scenes.get(scene_name) 
    def opening_scene(self): 
     print "inside opening scene" 
     return self.next_scene(self.start_scene)` 
a_map = Map('central_corridor') 
a_game = Engine(a_map) 
a_game.play() 

出力:

Inside engine class 
inside map class 
Central_corridor 
scene_map is: <__main__.Map object at 0x00000000029B7908> 
inside play <__main__.Engine object at 0x00000000029B7940> 

1.Firstly、Map()クラスをパラメータとしてcentral_corridorと呼ばれています。その行によると、それはInside the Map classを印刷する必要があります。しかし、なぜ私は得ていますInside Engine class
2.whatはscene_mapですか?オブジェクトまたはオブジェクトへの参照?
ありがとうございます。

+3

コードまたはエラーメッセージをイメージとしてではなくテキストとして入力しないでください。 – eyllanesc

+2

@eyllanesc - あなたは正しいですが、画像を埋め込むために私の編集を元に戻す必要はありません。リンクをクリックする必要はありません。この質問を理解するのは十分です... –

+0

@DavidMakogonこの方法を有効にすると、イメージをコードまたはエラーメッセージとして配置する動作がサポートされます。私はまた、画像を表示するためにそれを有効にしたいが、それは私がしなかったエラーメッセージであることを見ていた。 – eyllanesc

答えて

1

Engineクラスは、Mapの上に定義されています。

印刷された行は、コントリビュータ内にないクラスの内部に書き込まれます。したがって、クラスがインタプリタにロードされる限り、Inside classステートメントが出力されます。

+0

これは、私たちが作成したオブジェクト以外のインタプリタによってクラスが呼び出されることを意味しますか? –

関連する問題