fehler in methode (m.weigand buch)

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

hi,

ich benutze das buch 'objektorientierte programmierung mit python' von m. weigand. ich erhalte auf eine aufgabe die ich so direkt von der beiligenden cd übernommen habe einen fehler, und komme so leider nicht weiter.

Code: Alles auswählen

class Geld:  
....    
def __cmp__(self, other):
        a = self._berechneEuro (self)           # zeile 29
        b = self._berechneEuro (other)
        if a<b: return -1
        elif a == b: return 0
        else: return 1

Code: Alles auswählen

       
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "geld2.py", line 29, in __cmp__
a = self._berechneEuro (self)
TypeError: _berechneEuro() takes exactly 1 argument (2 given)
ich kann auch gerne die ganze aufgabe posten, dachte aber an die datenbank des forums und hoffe das dieser bereich ausreicht. es wäre jedenfalls klasse wenn mir jemand auf die sprünge helfen könnte.
falls jemand das buch hat, findet sich das ganze auf s. 258.

ich verstehe nicht wie sowas in einem fachbuch passieren, und hoffe auch fast noch, das ich doch irgendwas ganz falsch verstanden habe - naja.

bis denn[/code]
Gast

sorry,
der fehler tritt

hotelkosten = Geld('USD', 120)
mietkosten = Geld('EUR', 100)
...
if mietwagen > hotelkosten:

nach dieser if anweisung auf.
Gast

wie so oft kurz nach dem posten habe ich den fehler jetzt gefunden.

a = self._berechneEuro (self) # zeile 29
b = self._berechneEuro (other)

entfernt man die klammern (self) und (other) funktionierts.
fragt sich, warum sie auf der cd im code sind. naja, wenigstens geht jetzt weiter.
BlackJack

Das kann auch nach dem Entfernen nicht funktionieren. Dann steht da ja für `a` und `b` beide Male der exakt gleiche Funktionsaufruf und damit sollte immer ``a == b`` gelten. Ohne das Buch oder das Beispiel zu kennen würde ich sagen bei `b` müsste es ``b = other._berechneEuro()`` heissen.

Und das man diese if-Abfrage wirklich explizit hinschreibt ist auch etwas ungewöhnlich. Normalerweise würde das so aussehen:

Code: Alles auswählen

def __cmp__(self, other): 
    return cmp(self._berechneEuro(), other._berechneEuro())
Gast

im buch selbst steht:

Code: Alles auswählen

a = self.getEuro()
b = geld.geldEuro()
auf der beiligenden cd befindet sich obige version.

Edit (Leonidas): Code in Python Tags gesetzt und die Korrektur eingesetzt.
Gast

man man, 2 zeile beginnt mit
b=
BlackJack

Und wo kommt der Name `geld` her? Und warum einmal `getEuro()` und einmal `geldEuro()`? Nu' bin ich einigermassen verwirrt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Na, deswegen gibt es ja auch O'Reilly Bücher, die haben nicht so viele Fehler (zumindest nicht die englischschprachigen Originale) ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten