2016-11-06 68 views
1

对于我从学校得到的任务,我们需要做一个象棋游戏。一个任务是我们需要使用诸如放置,删除和替换等方法来创建一个名为棋盘的类。Python:自制类的方法不接受元组作为参数

我的棋盘是一个字典,其中键为位置,形式为一个元组,值为棋子值。但是如果我想给一个元组作为我的方法的参数,它会失败。

这是我的代码:

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 
+1

您需要明确说明什么不起作用。为什么要通过用'self'作为前缀来试图让班级,行和列成员? – Carcigenicate

回答

0

没有创建一个实例在初始化属性出你DICT属性。将其设置为一个实例属性,你需要将它添加到您的实例为self.DICT

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

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

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

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

,不要把它设置为一个实例属性,您可以:

所以,要解决你的问题,你可以这样做简单地做:

def place(self, piece,(row,column)): 
    self.DICT[(row,column)] = piece 
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)) 
相关问题