2017-10-27 6 views
0

私のクラスでは、テキストの冒険をしています。部屋を歩くだけです。今まで、私は "部屋"と呼ばれるクラスを作った。関数名に変数を使用する

class Room(object): 
    def __init__(self,name): 
     self.name = name 

サブクラスを使用して移動するいくつかの部屋と同様に。

class Backyard(Room): 
global current 

def __init__(self): 
    self.name = "Backyard" 

def choose(self,choice): 
    if "north" in choice: 
     current = kitchen 
    else: 
     print("You cannot go that way") 
    return current 

class Kitchen(Room): 
    global current 

    def __init__(self): 
     self.name = "Kitchen" 

    def choose(self,choice): 
     if "south" in choice: 
      current = yard 
     else: 
      print("You cannot go that way") 
     return current 

yard = Backyard() 
kitchen = Kitchen() 

今、実際のゲームを実行するために、私はこれを持っています。 、

run = True 
current = yard 
show_yard 

while run: 
    choose(input(">>> ") 
    show_current 

show_yard機能は、ちょうどその部屋(ヤード)の説明を出力しますが、私はゲームを実行すると、私は何でも変数「電流は」に設定されたようにshow_currentを使用できるように期待していましたその説明を読み上げるが、代わりに 'show_current'という関数がないのでエラーが出る。

私は関数を呼び出すときに変数を挿入する方法があるので、このような単純なもので解決できる何かのコードを書く必要はありませんかと思います。ありがとう。

+0

あなたのコードをインデントしてください、そしてさらに、 'はGlobal'は深刻なアンチパターンです。ごくまれにしか使用しないでください。 –

+1

それぞれの場所に 'show()' *メソッド*を付けます。それから、現在の場所で対応するメソッドを呼び出すために 'current.show()'を使うだけです。メソッドを基底クラスに置くことができます(単に 'self.name'を使って位置の名前を表示します)、または各サブクラスにもっと巧妙な実装を与えることができます。 –

+0

'current'をどこにでもグローバル変数にする必要はありません。あなたの 'choose()'メソッドは新しい場所を返すので、 'current = current.choose()'を使って返された場所を 'current'に戻します。クラス*の 'global current' *を設定しても*動作しているわけではなく、現在のコードの機能を変更せずに' global current'行を削除することができます。 –

答えて

1

あなたはRoomshow()メソッドを追加した場合、あなたはそのサブクラスのすべてのインスタンスにそれを呼び出すことができるようになります:

class Room(object): 
    def __init__(self,name): 
     self.name = name 
    def show(self): 
     print(self.name) 
関連する問題