AttributeError:' str'对象没有属性(方法)

时间:2017-01-16 06:09:01

标签: python methods

我试图写一个国际象棋游戏,并在尝试移动我的Pawn时遇到上述错误。我第一次调用my_board[0][0].passive_move()工作正常,并正确地将对象移动到第二个列表中。但是,如果我立即再次调用它,我会在标题中得到错误,而不是将对象移动到第三个列表中。

__author__ = 'admin'

class Pawn:
    def __init__(self, y, x):
        self.board = my_board
        self.y = y
        self.x = x

    def __str__(self):
        return "Pawn"

    def passive_move(self):
        self.board[self.y+1][self.x] = self
        self.board[self.y][self.x] = chr(self.y+65)+str(self.x+1)
        self.y += 1

class ChessBoard:
    def __init__(self):
        self.board = self.create_board

    def create_board(self):
        game_board = []
        letters = ["A", "B", "C", "D", "E", "F", "G", "H"]
        for x in range(len(letters)):
            game_board.append([])
            for y in range(1, 9):
                game_board[x].append(str(letters[x])+str(y))

        return game_board

if __name__ == "__main__":
    my_board = ChessBoard().create_board()

    for x in range(len(my_board)):
        my_board[0][x] = Pawn(0, x)


    my_board[0][0].passive_move()
    my_board[0][0].passive_move()


    print(my_board)

1 个答案:

答案 0 :(得分:0)

问题是你在同一个棋盘坐标上拨打passive_move两次:

my_board[0][0].passive_move()
my_board[0][0].passive_move()

在第一次调用之后,最初在该方块上的pawn将向上移动一个,因此该square将保持一个字符串而不是Pawn实例。由于字符串没有passive_move方法,因此第二次调用时会出错。

请注意,如果您仅将board编入索引并保存了对Pawn实例的引用,则可以告诉它移动两次。尝试这样的事情:

pawn = my_board[0][0]
pawn.passive_move()
pawn.passive_move()