2017-08-01 102 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()以返回大小而不是设置它。