Seite 1 von 1

fehler in methode (m.weigand buch)

Verfasst: Freitag 18. Februar 2005, 23:55
von 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]

Verfasst: Samstag 19. Februar 2005, 00:07
von Gast
sorry,
der fehler tritt

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

nach dieser if anweisung auf.

Verfasst: Samstag 19. Februar 2005, 00:19
von 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.

Verfasst: Sonntag 20. Februar 2005, 00:16
von 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())

Verfasst: Sonntag 20. Februar 2005, 02:03
von 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.

Verfasst: Sonntag 20. Februar 2005, 02:04
von Gast
man man, 2 zeile beginnt mit
b=

Verfasst: Montag 21. Februar 2005, 00:03
von BlackJack
Und wo kommt der Name `geld` her? Und warum einmal `getEuro()` und einmal `geldEuro()`? Nu' bin ich einigermassen verwirrt.

Verfasst: Montag 21. Februar 2005, 13:34
von Leonidas
Na, deswegen gibt es ja auch O'Reilly Bücher, die haben nicht so viele Fehler (zumindest nicht die englischschprachigen Originale) ;)