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 dieself.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 alsself.bricks.bricksId[0]
. Meinst du die Verwendungself.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
hatBricks
? Das klingt wie eine sehr... einzigartige Kapselung. Außerdem erscheint youtbricksId
Liste ist in der Tat eine Liste vonint
s, nichtBrick
s. Da TkInter gibt eine Objekt-ID auscreate_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 wascanvas.create_rectangle()
gibt, oder was Sie wollten zu tun, mit denen Rechtecke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Damit die
Brick
Objekt indexiert werden, müssen Sie die Implementierung der Methoden:__getitem__
__setitem__
__delitem__
Brauchen Sie nicht alle von Ihnen, nur diejenigen, die Sie verwenden.
Jedoch, wie es scheint, ein Fall von
self.bricks
ein backstein statt einer Liste von Bausteinen. Eine Liste der Ziegel ist mit Wendeschneidplatten; aber ein Stein selber nicht, es sei denn, Sie implementieren die oben genannten Methoden.Überprüfen diese für Referenz.
Um anrufen zu können
self.bricks.bricksId[number]
wenn ich Sie gebraucht habe: