Python: Objekt unterstützt nicht die Indizierung

Ja, diese Frage wurde vorher gefragt. Nein, keiner der Antworten, die ich Lesen könnte, das problem zu beheben, die ich habe.

Ich versuche zu schaffen, ein wenig Bounce Spiel. Ich habe die Steine so:

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]

Und ich bin versucht, eine Referenz-ID bricksId[0] hier:

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

Früher, in der __init__ ich definieren Ziegel als Steine, die definiert ist als Brick(canvas). Allerdings, die Fehlermeldung heißt:

TypeError: 'Brick' object does not support indexing

In den Antworten auf die anderen Fragen zu diesem Thema, ich finde keine, die mir helfen, den Zugang bricks.bricksId[0].

  • Und was ist die vollständige traceback? Es scheint, dass self.bricks.bricksId ist nicht mehr eine Liste, wenn die self.bricks.bricksId[0] eine exception wirft.
  • Traceback (most recent call last): File "C:\Users\Jonathan\Documents\Python\Bounce!.py", line 106, in <module> ball.draw () - Datei "C:\Users\Jonathan\Documents\Python\Bounce!.py", line 47, in zeichnen selbst.hit_brick(pos,selbst.Steine.bricksId[0]) File "C:\Users\Jonathan\Documents\Python\Bounce!.py", line 61, in hit_brick brick_pos = selbst.canvas.coords(selbst.Ziegel[brickId].id) TypeError: 'Brick' - Objekt unterstützt nicht die Indizierung
  • self.bricks[brickId] ist nicht identisch als self.bricks.bricksId[0]. Meinst du die Verwendung self.bricks.bricksId[brickId].id es vielleicht?
  • Wie wollen Sie initialisieren self.bricks?
  • Ich habe gerade behoben, aber ich bekomme einen neuen Fehler: Traceback (most recent call last): File "C:\Users\Jonathan\Documents\Python\Bounce!.py", line 106, in <module> ball.draw () - Datei "C:\Users\Jonathan\Documents\Python\Bounce!.py", line 47, in zeichnen selbst.hit_brick(pos,selbst.Steine.bricksId[0]) File "C:\Users\Jonathan\Documents\Python\Bounce!.py", line 61, in hit_brick brick_pos = selbst.canvas.coords(selbst.Steine.bricksId[brickId].id) AttributeError: 'int' - Objekt hat kein Attribut 'id'
  • In der Klasse Ball: In der __init__(self,Leinwand,Paddel,Ziegel), selbst.Ziegel = Ziegel. Ziegel ist definiert als Ziegel(canvas).
  • So Ball hat Bricks? Das klingt wie eine sehr... einzigartige Kapselung. Außerdem erscheint yout bricksId Liste ist in der Tat eine Liste von ints, nicht Bricks. Da TkInter gibt eine Objekt-ID aus create_rectangle obwohl, das ist nicht zu viel von einer überraschung...
  • sorry, ich bin nicht Debuggen Sie Ihren code Zeile für Zeile, Fehler durch Fehler. Ich weiß nicht, was canvas ist hier noch was canvas.create_rectangle() gibt, oder was Sie wollten zu tun, mit denen Rechtecke.

Schreibe einen Kommentar