Python:自制类的方法不接受元组作为参数

时间:2016-11-06 13:46:58

标签: python class

对于我从学校上学的作业,我们需要下棋。一个任务是我们需要创建一个名为chessboard的类,其中包含一些方法,如place,delete和replace。

我的棋盘是一个字典,按键作为地方,以元组的形式,而值作为棋子作为值。但是如果我想把一个元组作为我的方法的参数,那就失败了。

这是我的代码:

class ChessBoard:
    def __init__(self):
        DICT={ (A,1):None,(A,2):None,(A,3):None,(A,4):None,(A,5):None,(A,6):None,(A,7):None,(A,8):None,
               (B,1):None,(B,2):None,(B,3):None,(B,4):None,(B,5):None,(B,6):None,(B,7):None,(B,8):None,
               (C,1):None,(C,2):None,(C,3):None,(C,4):None,(C,5):None,(C,6):None,(C,7):None,(C,8):None,
               (D,1):None,(D,2):None,(D,3):None,(D,4):None,(D,5):None,(D,6):None,(D,7):None,(D,8):None,
               (E,1):None,(E,2):None,(E,3):None,(E,4):None,(E,5):None,(E,6):None,(E,7):None,(E,8):None,
               (F,1):None,(F,2):None,(F,3):None,(F,4):None,(F,5):None,(F,6):None,(F,7):None,(F,8):None,
               (G,1):None,(G,2):None,(G,3):None,(G,4):None,(G,5):None,(G,6):None,(G,7):None,(G,8):None,
               (H,1):None,(H,2):None,(H,3):None,(H,4):None,(H,5):None,(H,6):None,(H,7):None,(H,8):None }

    def place(self, piece,(row,column)):
        self.piece=piece
        self.(row,column)=(row,column)
        DICT[(row,column)]=self.piece

2 个答案:

答案 0 :(得分:0)

您没有在init中的DICT属性中创建实例属性。要将其设置为实例属性,您需要将其作为self.DICT

添加到您的实例中

所以,你的init应该看起来像这样:

# not showing your full dictionary:
def __init__(self):
        self.DICT={ (A,1):None,(A,2):None}

现在,在您的其他实例方法中,您只需相应地访问,作为实例属性。您正在某个位置放置一块,因此您似乎想要在self.piece设置row,column。此外,我不知道您的其他代码是什么样的,但如果您传递给piece方法的place参数仅用于该方法,则无需设置它作为实例属性。

因此,要解决您的问题,您可以这样做:

def place(self, piece,(row,column)):
    self.piece=piece
    self.DICT[(row,column)]=self.piece

如果您实际上没有在代码中的任何其他地方使用piece,请不要将其设置为实例属性,您只需执行以下操作:

def place(self, piece,(row,column)):
    self.DICT[(row,column)] = piece

答案 1 :(得分:0)

我认为这是你想要实现的目标,

def place(self, piece, row_column_tuple):
  self.piece=piece
  self.row_column_tuple=row_column_tuple
  DICT[row_column_tuple]=self.piece

然后在代码的其他地方你可以像

一样调用这个方法
place(piece, (row, column))