Überladen von Operatoren

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
Florian R.

Sonntag 9. Mai 2004, 18:56

Hallo zusammen,

ich hab mich jetzt schon seit geraumer Zeit durch alle Möglichen Quellen geklickt und dazu nix gefunden.

Bzw. nur viel zu schwer erklärt.

Mein Problem: Ich möchte eine Klasse stack programmieren (fertig) und dem Benutzer die Möglichkeit geben zwei Objekte dieser Klasse über den Operator "+" miteinander zu einem neuen zu verbinden. Sprich: Wie kann ich das "+" überladen? So wie bei Listen. Wenn man zwei Listen hat und liste1+liste2 eingibt, werden beide zu einer zusammengefügt. Wie funktioniert das bei einem selbstdefinierten Objekt (in dem Fall ein Stack)?

Vielen Dank schonmal.

Gruß, Florian
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

Sonntag 9. Mai 2004, 20:30

guck dir __add__ und __radd__ an..

siehe google, z.b.:

http://www.linuxgazette.com/issue54/pramode.html

auf bald
oenone
if you don't remember something, it never happened.
if you aren't remembered, you never existed.
i don't quite understand what love is like... but if there was someone who liked me, i'd be happy.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 10. Mai 2004, 00:08

Hi Florian,

Code: Alles auswählen

class Stack(object):
    ... #Deine Methoden u.s.w
    def __add__(self, other):
        from copy import copy
        result = copy(self) # erstmal eine Kopie von self erstellen
        for entry in other: # alle Einträge in other durchlaufen und
            result.push(entry) # zur Kopie von self hinzufügen
        return result
# fertig

Gruß

Dookie

P.S.: mit list.append() und list.pop() kannst Du auch ganz normale Listen wie einen Stack verwenden.

P.P.S.: ich hab den Thread nach Allgemeine Fragen verschoben
Florian R.

Montag 10. Mai 2004, 15:19

Hey super danke. Das hat mir geholfen :D

Gruß, Florian
Antworten