Python:Object不支持索引

Jon*_*rit 18 python indexing object typeerror

是的,之前已经问过这个问题.不,我读过的答案都没有解决我的问题.

我正在尝试制作一个小弹跳游戏.我创建了这样的砖块:

def __init__(self,canvas):
    self.canvas = canvas
    self.brick1 = canvas.create_rectangle(0,0,50,20,fill=random_fill_colour(),outline=random_fill_colour())
    self.brick2 = canvas.create_rectangle(50,0,100,20,fill=random_fill_colour(),outline=random_fill_colour())
    self.brick3 = canvas.create_rectangle(100,0,150,20,fill=random_fill_colour(),outline=random_fill_colour())
    self.brick4 = canvas.create_rectangle(150,0,200,20,fill=random_fill_colour(),outline=random_fill_colour())
    self.brick5 = canvas.create_rectangle(200,0,250,20,fill=random_fill_colour(),outline=random_fill_colour())
    self.brick6 = canvas.create_rectangle(250,0,300,20,fill=random_fill_colour(),outline=random_fill_colour())
    self.brick7 = canvas.create_rectangle(300,0,350,20,fill=random_fill_colour(),outline=random_fill_colour())
    self.brick8 = canvas.create_rectangle(350,0,400,20,fill=random_fill_colour(),outline=random_fill_colour())
    self.brick9 = canvas.create_rectangle(400,0,450,20,fill=random_fill_colour(),outline=random_fill_colour())
    self.brick10 = canvas.create_rectangle(450,0,500,20,fill=random_fill_colour(),outline=random_fill_colour())
    self.bricksId = [self.brick1,self.brick2,self.brick3,self.brick4,self.brick5,self.brick6,self.brick7,self.brick8,self.brick9,self.brick10]
Run Code Online (Sandbox Code Playgroud)

而我正在尝试引用bricksId[0]此处的ID :

self.hit_brick(pos,self.bricks.bricksId[0])
Run Code Online (Sandbox Code Playgroud)

之前,在中__init__,我将砖块定义为砖块,定义为Brick(canvas).但是,错误指出:

TypeError: 'Brick' object does not support indexing
Run Code Online (Sandbox Code Playgroud)

在对该主题的其他问题的答案中,我找不到任何帮助我访问的内容bricks.bricksId[0].

bit*_*lit 35

为了使Brick对象可索引,您必须实现以下方法:

  • __getitem__
  • __setitem__
  • __delitem__

你不需要所有这些,只需要你使用的那些.

然而,这似乎self.bricks是砖块而不是砖块列表的情况.砖块列表是可索引的; 但是,除非您实施上述方法,否则不会使用砖块.

检查这个以供参考.


为了能够self.bricks.bricksId[number]在我需要时打电话:

def __getitem__(self,index):
    return self.bricks.bricksId[index]

def __setitem__(self,index,value):
    self.bricks.bricksId[index] = value
Run Code Online (Sandbox Code Playgroud)