Operator überladen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gast

hallo zusammen,
habe 2 listenobjekte und möchte verschiedene rechenoperationen darauf anwenden(+-*/)
vordefiniert(für listen!!) ist nur die funktion __add__
mein problem.....
beim ausführen von z.b. a - b(a und b sind listen) erkennt python nicht meine vorgefertigte def von __sub__ und gibt mir eine fehlermeldung
TypeError: unsupported operand type(s) for -: 'list' and 'list'
zurück.
woran liegt es das python meine überladenen operatoren nicht erkennt, muss ich noch irgendetwas ein-,an- odersonstwasfügen.
danke
Gast

Anonymous hat geschrieben:hallo zusammen,
habe 2 listenobjekte und möchte verschiedene rechenoperationen darauf anwenden(+-*/)
vordefiniert(für listen!!) ist nur die funktion __add__
mein problem.....
beim ausführen von z.b. a - b(a und b sind listen) erkennt python nicht meine vorgefertigte def von __sub__ und gibt mir eine fehlermeldung
TypeError: unsupported operand type(s) for -: 'list' and 'list'
zurück.
woran liegt es, dass python meine überladenen operatoren nicht erkennt, muss ich noch irgendetwas ein-,an- odersonst was hinzufügen.
danke
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Gast,

solange Listen Listen bleiben werden auch nur die für Listen geltenden Operatoren funktionieren. Du musst schon eingene, von Listen abgeleitete Classen benutzen.

Code: Alles auswählen

>>> class myList(list):
...     def __add__(self, other):
...         return [a+b for a,b in zip(self, other)]
...     def __sub__(self, other):
...         return [a-b for a,b in zip(self, other)]
...
>>> l1 = myList((1,2,3))
>>> l2 = myList((5,6,7))
>>> print l1+l2
[6, 8, 10]
>>> print l1-myList([7,4,9])
[-6, -2, -6]

Gruß

Dookie
Antworten