Python: объект не поддерживает индексирование

Да, этот вопрос задавали раньше. Нет, ни один из ответов, которые я читал, не может решить проблему, которую я имею.

Я пытаюсь создать небольшую игру Bounce. Я создал такие кирпичи:

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] 

И я пытаюсь ссылаться на идентификатор bricksId[0] здесь:

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

Раньше, в __init__ , я определяю кирпичи как кирпичи, которые определяются как Brick(canvas) . Однако в этой ошибке указывается:

 TypeError: 'Brick' object does not support indexing 

В ответах на другие вопросы по этому вопросу я не могу найти никого, кто помог бы мне получить доступ к bricks.bricksId[0] .

  • В python - оператор, который набор использует для проверки, если объект находится в наборе
  • Передавать несколько аргументов в виде кортежа
  • В чем разница между квадратными скобками и точками в Python?
  • Почему объект .__ new__ работает по-разному в этих трех случаях
  • В чем разница между конструктором и инициализатором в python?
  • Создание списка объектов в Python
  • Тест Python, если объект существует
  • openpyxl проверить пустую ячейку
  • One Solution collect form web for “Python: объект не поддерживает индексирование”

    Чтобы объект 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 
    Python - лучший язык программирования в мире.