Python: Objeto no soporta indexación

Sí, esta pregunta se ha hecho antes. No, ninguna de las respuestas que leí podría solucionar el problema que tengo.

Estoy tratando de crear un pequeño juego Bounce. He creado los ladrillos así:

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] 

Y estoy tratando de hacer referencia a la ID de bricksId[0] aquí:

 self.hit_brick(pos,self.bricks.bricksId[0]) 

Anteriormente, en el __init__ , defino ladrillos como ladrillos, que se define como Brick(canvas) . Sin embargo, el error indica:

 TypeError: 'Brick' object does not support indexing 

En las respuestas a las otras preguntas de este tema, no puedo encontrar ninguna que me ayude a acceder a bricks.bricksId[0] .

Para que el objeto Brick sea ​​indexable, debe implementar los métodos:

  • __getitem__
  • __setitem__
  • __delitem__

No los necesitas todos, solo los que usas.

Sin embargo, esto parece ser un caso de self.bricks del self.bricks son un ladrillo en lugar de una lista de ladrillos. Una lista de ladrillos es indexable; sin embargo, un ladrillo en sí no lo es a menos que implementes los métodos anteriores.

Compruebe esto para referencia.


Para poder llamar a self.bricks.bricksId[number] cuando lo necesito:

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