Seite 1 von 1

Wie __getitem__ auf mehrdimensionale Arrays anwenden?

Verfasst: Samstag 3. Dezember 2011, 17:17
von andi_wand
Hallo,
nachdem ich per Google leider nichts gefunden habe, stelle ich hier mal die Frage rein:
Ich habe eine Klasse, die ihre Daten in einem zweidimensionalen Array speichert. Nun soll alleine durch Eingabe von

Code: Alles auswählen

m[x,y]
das Datum an der Stelle (x,y) ausgegeben werden. Dazu wollte ich __getitem__ verwenden, habe jetzt jedoch das Problem, dass ich nicht weiß, wie ich diese Funktion für mehrdimensionale Arrays anwenden kann.
Für eindimensionale Arrays funktioniert das ganze.
Der Code für die Funktion:

Code: Alles auswählen

def __getitem__(self,row,column):
        print self.maze_Rows[row][column]
Aufruf mit:

Code: Alles auswählen

m[3,2]
Jedoch gibt mir Python dann den Fehler zurück:

Code: Alles auswählen

TypeError: __getitem__() takes exactly 3 arguments (2 given)
Per direktem Aufruf (also

Code: Alles auswählen

m.__getitem__(3,2)
) geht das jedoch.
Wie kann ich also das Problem lösen?
Vielen Dank für Antworten

Re: Wie __getitem__ auf mehrdimensionale Arrays anwenden?

Verfasst: Samstag 3. Dezember 2011, 17:24
von andi_wand
EDIT: Sorry, hat sich erledigt, habs gerade selbst gelöst.
Danke

Re: Wie __getitem__ auf mehrdimensionale Arrays anwenden?

Verfasst: Samstag 3. Dezember 2011, 19:30
von derdon
Schreibe bitte, *wie* du das Problem gelöst hast. Andere haben genau das gleiche Problem und finden mittels Google hierher und sehen nur "hat sich erledigt". Ich vermute, dass du die Funktionssignatur angepasst hast, also

Code: Alles auswählen

def __getitem__(self, (row, column)):
    print self.maze_Rows[row][column]
oder

Code: Alles auswählen

def __getitem__(self, item):
    row, column = item
    print self.maze_Rows[row][column]
Wobei letzteres zu bevorzugen ist, weil ersteres ab einer bestimmten Python-Version nicht mehr unterstützt wird (habe vergessen, welche es war, vielleicht 3.0?).

Re: Wie __getitem__ auf mehrdimensionale Arrays anwenden?

Verfasst: Sonntag 4. Dezember 2011, 03:04
von gkuhl
Ich würde von `__getitem__` auch erwarten, dass das Element zurückgegeben wird:

Code: Alles auswählen

def __getitem__(self, item):
    row, column = item
    return self.maze_Rows[row][column]
Grüße
Gerrit

Re: Wie __getitem__ auf mehrdimensionale Arrays anwenden?

Verfasst: Sonntag 4. Dezember 2011, 03:14
von derdon
Natürlich, hatte da wohl ne Art Tunnelblick :oops:

Re: Wie __getitem__ auf mehrdimensionale Arrays anwenden?

Verfasst: Dienstag 6. Dezember 2011, 13:02
von andi_wand
Meine Lösung war:

Code: Alles auswählen

 def __getitem__(self,args):
        print self.maze_Rows[args[0]][args[1]]