2016-12-13 13 views
-1

マイコード:私のクラスの新しいインスタンスごとにカウント変数がインクリメントしないのはなぜですか?

class Lobby(Definition): 
    Lcount = 0 
    def __init__(self): 
     if Lobby.Lcount == 0: 
      self.description = "test1" 
     elif Lobby.Lcount > 0: 
      self.description = "test2" 
     else: 
      print("\nHmmm something went wrong...\n") 
     self.contents = ["Briefcase"] 
     self.doors = {"n": "terminal", "w": "hallway"} 
     Lobby.Lcount += 1 

私は部屋のインスタンスが作成された後にどこそれになりたい(すなわち、あなたが前にそれを訪問している)、それはそれよりも、元の1を異なる説明が表示されます。ただし、同じ記述を印刷し続けます。では、私はここで間違っていますか?

編集:ここでは私の定義クラスにあるものである:Definition

class Definition: 

    def __init__(self): 
     self.description = "" 
     self.contents = [] 
     self.doors = {} 

    def get_desc(self): 
     print("{}".format(self.description)) 

    def get_direction(self): 
     direction = input("Enter a direction or search the room: ").lower() 
     search = True 
     if direction == "q": 
      return direction 
     elif direction in self.doors: 
      location = self.doors[direction] 
      return location 
     elif direction == "s": 
      while search: 
       action = input("\nYou search for some items... Press 1 to continue or 2 to quit.\n") 
       if action == "1": 
        if len(location.contents) == 0: 
          print("\nYou find nothing of value in the room.\n") 
        else: 
         find = random.randrange(1, 3) 
         if find == 1: 
          found = random.randrange(len(location.contents)) 
          item = location.contents.pop(found) 
          print("\nYou found a {}\n".format(item)) 
          self.items.append(item) 
          self.check_items() 
         else: 
          print("\nNothing found yet\n") 
       elif action == "2": 
        search = False 
        break 
       else: 
        print("\nLocation reminder: ") 
        location.get_description() 
     else: 
      return "\nNot a valid entry\n" 
+1

「定義」の内容 –

+4

'Definition'を' object'にすることで簡単なテストをすることで、それは正常に機能します。 – mgilson

+2

@mgilsonの結果を確認できます。 –

答えて

0

何かが適切に働いてからこれを防止することです。

class FooClass(object): 
    foo = 0 
    def __init__(self): 
     print("Foo {} before".format(self.__class__.foo)) 
     self.__class__.foo += 1 
     print("Foo {} after".format(self.__class__.foo)) 
# Works appropriately 

>>> x = Foo() 
Foo 0 before 
Foo 1 after 
>>> x = Foo() 
Foo 1 before 
Foo 2 after 

しかし、バイナリの「見た」変数の場合は、これを追跡する別の方法をお勧めします。複数のLobbyオブジェクトを作成する能力を制限することで、将来的にあなたを混乱させる可能性があります。 __init__が現在行っているロジックを実行するvisitメソッドを使用して、すべてのオブジェクトを格納する辞書を作成することを強く検討し、次回の訪問で何か違うことをするフラグを設定します。

class SomeRoom(Room): 
    # where Room is some superclass like Definition is now 
    def __init__(self, *args): 
     super().__init__(args) # or however 
     self.__visited = False 

    @property 
    def visited(self): 
     return self.__visited 

    def visit(self): 
     if self.visited: 
      print("Welcome back") 
     else: 
      print("Welcome!") 
     self.__visited = True 
関連する問題