web-dev-qa-db-ja.com

Python:オブジェクトはインデックス作成をサポートしていません

はい、この質問は以前に尋ねられました。いいえ、私が読んだ答えはどれも私が持っている問題を解決できませんでした。

私は小さなバウンスゲームを作成しようとしています。このようなレンガを作成しました:

_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]_のIDをここで参照しようとしています:

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

以前、___init___で、ブリックをブリックとして定義します。これはBrick(canvas)として定義されます。ただし、エラーの状態は次のとおりです。

_TypeError: 'Brick' object does not support indexing
_

このテーマの他の質問への回答では、_bricks.bricksId[0]_にアクセスするのに役立つものは見つかりません。

15
Jonathan Spirit

Brickオブジェクトをインデックス可能にするには、メソッドを実装する必要があります。

  • __getitem__
  • __setitem__
  • __delitem__

すべてを必要とするのではなく、使用するものだけを必要とします。

ただし、これは、self.bricksがブリックのリストではなくブリックの場合のようです。ブリックのリストはインデックス可能です。ただし、上記のメソッドを実装しない限り、ブリック自体はそうではありません。

this を参照してください。


必要なときにself.bricks.bricksId[number]を呼び出せるようにするには:

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

def __setitem__(self,index,value):
    self.bricks.bricksId[index] = value
31
bitsplit