0

あるクラスの関数を別のクラスから呼び出そうとしています。これが私のコードです:

import os

class GameRoom():

    msgLine1 = ""
    msgLine2 = ""
    msgLine3 = ""
    msgLine4 = ""
    msgLine5 = ""

    def GameStatus(self):
        while True:
            os.system('cls')
            print self.msgLine1
            print self.msgLine2
            print self.msgLine3
            print self.msgLine4
            print self.msgLine5 + "\n"
            print "Do what?\n"
            userDecision = raw_input()
            if userDecision.upper() == "GO":
                Player().Go()
                break
            else:
                self.CycleMessages("That's not a valid choice!")

    def CycleMessages(self,newMsg="error"):
        self.msgLine5 = self.msgLine4
        self.msgLine4 = self.msgLine3
        self.msgLine3 = self.msgLine2
        self.msgLine2 = self.msgLine1
        self.msgLine1 = newMsg

class Player():
    def Go(self):
        GameRoom().CycleMessages("Player goes.")
        GameRoom().GameStatus()

def main():
    GameRoom().GameStatus()

if __name__ == '__main__':
    main()

自分自身を呼び出すとCycleMessages、「それは有効な選択ではありません!」という行がいっぱいになります。通常、彼らがすべきように。CycleMessagesクラスから呼び出すとPlayer、「Player gos.」と表示される代わりに、すべての行がクリアされます。「エラー」も表示されません。

「Player go」をお願いします。を呼び出したときに表示されますPlayer().Go()。どうすればいいですか?どんな助けにも感謝します!

4

2 に答える 2

3

これはGameRoom().CycleMessages("Player goes.")、 を呼び出すときに、 の新しいインスタンスで呼び出しているために発生していますGameRoom。簡単な修正:

class GameRoom():

    def GameStatus(self):
        ...
            if userDecision.upper() == "GO":
                # Pass `Player` this instance of `GameRoom`
                Player().Go(self)
                break
            else:
                self.CycleMessages("That's not a valid choice!")

class Player():

    def Go(self, game):
        # And here, call `CycleMessages` on the passed instance of `GameRoom`.
        game.CycleMessages("Player goes.")
        game.GameStatus()

また、これはあなたの質問ではありませんが、命名規則の変更を検討することをお勧めします ( PEP8を参照)。

于 2012-12-03T02:22:28.383 に答える