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.
Gast

Operator überladen

Beitragvon Gast » Freitag 27. Februar 2004, 21:38

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

Re: Operator überladen

Beitragvon Gast » Freitag 27. Februar 2004, 21:40

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Freitag 27. Februar 2004, 21:46

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder