attributeError类intance没有属性'__getitem__'

时间:2017-05-02 03:51:09

标签: python

我创建了一个MarblesBoard类,用于实例化新的MarblesBoard对象。我想用Solver类来解决这个问题。

class MarblesBoard:
    def __init__(self, marbles):
        self.input = list(marbles) 
        print(marbles)
    def switch(self):
        self.input[1], self.input[0] = self.input[0], self.input[1]
        print self.input     
    def rotate(self):
        return self.input[1:] + self.input[:1]
        print self.input
    def is_solved(self):
        if all(self.input[i] <= self.input[i+1] for i in range(len(self.input)-1)):
            return True
            print "True"
        else:
            print "Not solved!"

board = MarblesBoard((3,6,7,4,1,0,8,2,5))
board.switch()
board.rotate()
board.is_solved()
board

按预期工作。

class Solver:
    def __init__(self, MarblesBoard):
        print self
        self.input = MarblesBoard
    def solve(self):
        if self.input[0] & self.input[1] != 0:
            if self.input[1] < self.input[0]:
                self.input.switch()
            else:
                self.input.rotate()
        else:
            self.input.rotate()

player = Solver(board)
player.solve()

给我AttributeError:MarblesBoard实例在求解函数中的self.input行时没有属性' getitem '。

1 个答案:

答案 0 :(得分:1)

self.inputMarblesBoard类的一个实例,它包含一个也称为input的变量。 MarblesBoard没有实施__getitem__方法来获取其内部self.input列表,因此您必须自己进入

if self.input.input[0] & self.input.input[1] != 0:

第一个input获取MarblesBoard个实例,第二个input获取实例内的list

假设我使用更具描述性的变量名称

实现了Solver
class Solver:
    def __init__(self, MarblesBoard):
        print self
        self.marbles_board = MarblesBoard
        ...

然后使用它会更加明显

    def solve(self):
        if self.marble_board.input[0] & self.marble_board.input[1] != 0:
        ...