Python attributeError类intance没有属性“\uuu getitem\uuu”

Python attributeError类intance没有属性“\uuu getitem\uuu”,python,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], se

我创建了一个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实例在引用solve函数中的self.input行时没有属性“getitem”。

self.input是MarblesBoard类的一个实例,它包含一个也称为input的变量。MarblesBoard没有实现获取其内部self.input列表的uu_getitem_uu_uu方法,因此您必须亲自访问它

if self.input.input[0] & self.input.input[1] != 0:
第一个输入获取MarblesBoard实例,第二个输入获取实例内的列表

假设我用更具描述性的变量名实现了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:
        ...

Python为您打印了一个堆栈跟踪。。。。友善地与我们分享这些信息。我们总是看到这些事情,我们中的那些第一次做得不对的人,帮助我们弄清楚到底发生了什么。