2017-08-01 143 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") 
從現在開始

所以,而不是調用到size與BoardHandler .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'返回'無'。要麼返回一個int或只是調用'ask_size' –

+0

你的意思是我會調用'self.ask_size'而不是'self.size'? @tmadam – Entropy

+0

我的意思是調用'ask_size',但不要將它分配給'size'或讓'ask_size'返回一個int,就像@Daniel Sanchez的回答 –

回答

0

您的代碼就好了,問題是,你正在使用self.size時,它仍然是None,返回從詢問函數的值,而不是設置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() 

ask_size將用戶輸入,將其轉換爲int,並將其存儲在self.size的方法。該方法然後返回None,並且該值隨後存儲在self.size中,如上面引用的行。淨結果:self.size包含None。解決方案:請撥打self.ask_size()或修改self.ask_size()以返回大小而不是設置它。