2017-01-16 1 views
0

체스 게임을 쓰고 Pawn을 움직일 때 위의 오류가 발생합니다. my_board[0][0].passive_move()의 첫 번째 호출이 올바르게 작동하고 오브젝트가 두 번째 목록으로 올바르게 이동합니다. 그러나 내가 다시 그것을 즉시 호출하면, 객체를 세 번째 목록으로 옮기는 대신 제목에 오류가 발생합니다.AttributeError : 'str'객체에 속성 (메서드)이 없습니다.

my_board[0][0].passive_move() 
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

'Pawn.passive_move()'의 두 번째 줄이 무엇인지 이해하고 있습니까? –

+0

개체의 이전 위치를 원래 좌표로 바꾸지 않습니까? 적어도 그건 내 의도 였어. – Perplexityy

+1

... 아니요, 문자열을 목록에 삽입합니다. –

답변

0

문제는 같은 보드에 두 번 passive_move 좌표를 호출하고 있다는 것입니다 따라서 정사각형은 Pawn 인스턴스가 아닌 문자열을 보유합니다. 문자열에 passive_move 메서드가 없으므로 두 번째 호출에서 오류가 발생합니다.

board의 색인을 생성하고받은 Pawn 인스턴스에 대한 참조를 저장 한 경우 두 번 이동하도록 알릴 수 있습니다. 다음과 같이 시도하십시오 :

pawn = my_board[0][0] 
pawn.passive_move() 
pawn.passive_move() 
관련 문제