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'という関数がないのでエラーが出る。
私は関数を呼び出すときに変数を挿入する方法があるので、このような単純なもので解決できる何かのコードを書く必要はありませんかと思います。ありがとう。
あなたのコードをインデントしてください、そしてさらに、 'はGlobal'は深刻なアンチパターンです。ごくまれにしか使用しないでください。 –
それぞれの場所に 'show()' *メソッド*を付けます。それから、現在の場所で対応するメソッドを呼び出すために 'current.show()'を使うだけです。メソッドを基底クラスに置くことができます(単に 'self.name'を使って位置の名前を表示します)、または各サブクラスにもっと巧妙な実装を与えることができます。 –
'current'をどこにでもグローバル変数にする必要はありません。あなたの 'choose()'メソッドは新しい場所を返すので、 'current = current.choose()'を使って返された場所を 'current'に戻します。クラス*の 'global current' *を設定しても*動作しているわけではなく、現在のコードの機能を変更せずに' global current'行を削除することができます。 –