2017-08-01 33 views
-1

クラス属性をsizeインスタンス属性に変更する助けが必要です。 これは、現在のコード(作品)である:私はインスタンスにクラスを変更しようとするとクラス属性をインスタンス属性に変更する方法Pythonプログラミング

class BoardHandler: 
    size=None 
    def __init__ (self): 
     self.board = None 

     if BoardHandler.size is None: 
      self.ask_size() 
     self.getNewBoard() 

    def ask_size(self): 
     while True: 
      try: 
       BoardHandler.size = int(input("Which size would you want? ")) 
       break 
      except ValueError: 
       print("Wrong! try again") 

は次のように属性:

class BoardHandler: 
    def __init__ (self): 
     self.board = None 
     self.size = self.ask_size() 
     self.getNewBoard() 

    def ask_size(self): 
     while True: 
      try: 
       self.size = int(input("Which size would you want? ")) 
       break 
      except ValueError: 
       print("Wrong! try again") 

をだから今上から、代わりにBoardHandlerでsize上に呼び出します.size私はself.sizeを呼び出します。しかし、私は取得エラーです:あなたのコードだけで結構です

Traceback (most recent call last): 

    File "/Users//Desktop/REVERSI/.py", line 281, in <module> 
    menu() 
    File "/Users//Desktop/REVERSI/.py", line 213, in meny 
    main1v1() 
    File "/Users//Desktop/REVERSI/.py", line 236, in main1v1 
    handler = BoardHandler() 
    File "/Users//Desktop/REVERSI/.py", line 35, in __init__ 
    self.newBoard() 
    File "/Users//Desktop/REVERSI/.py", line 50, in newBoard 
    for i in range(self.size): 
TypeError: 'NoneType' object cannot be interpreted as an integer 
+0

'ask_size'は' None'を返します。 intを返すか 'ask_size'を呼び出す –

+0

あなたは' self.size'の代わりに 'self.ask_size'を呼び出すでしょうか? @tmadam – Entropy

+0

'ask_size'を呼び出しても、' size'に代入したり、 'ask_size'を使ってintを返したりしないでください@Daniel Sanchezの答え –

答えて

0

、問題は、それがNoneにまだあるときにself.sizeを使用している、代わりにself.sizeを設定する尋ねる関数から値を返すということです。

class BoardHandler: 
    def __init__ (self): 
     self.board = None 
     self.size = self.ask_size() 
     self.getNewBoard() 

    def ask_size(self): 
     while True: 
      try: 
       size = int(input("Which size would you want? ")) 
       return size 
      except ValueError: 
       print("Wrong! try again") 
+0

素晴らしいですが、' size = int(input( "size?")) 'それは' self.size'か 'size'ですか? – Entropy

+0

@Entropyでは、値は返され、 '__init__'関数の' self.size'に代入されるので、そこから利用可能になります。 – Netwave

+0

問題は、私がプログラム(「reversi」と呼ばれるゲーム)を実行しているときに、どういうわけかすべての以前のタイルが即座にゲームを終了することです。 – Entropy

2

次のようなことが起こります。

self.size = self.ask_size() 

self.sizeでそれを、ユーザ入力を受け取りintに変換し、格納ask_size方法有します。次に、メソッドはNoneを返し、その値は上に引用した線に従って、self.sizeに格納されます。結果:self.sizeにはNoneが含まれています。解決策:self.ask_size()に電話するか、self.ask_size()を変更して、サイズを設定する代わりに返すようにしてください。

関連する問題