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

fehler in methode (m.weigand buch)

Beitragvon Gast » Freitag 18. Februar 2005, 23:55

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

Beitragvon Gast » Samstag 19. Februar 2005, 00:07

sorry,
der fehler tritt

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

nach dieser if anweisung auf.
Gast

Beitragvon Gast » Samstag 19. Februar 2005, 00:19

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

Beitragvon BlackJack » Sonntag 20. Februar 2005, 00:16

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

Beitragvon Gast » Sonntag 20. Februar 2005, 02:03

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

Beitragvon Gast » Sonntag 20. Februar 2005, 02:04

man man, 2 zeile beginnt mit
b=
BlackJack

Beitragvon BlackJack » Montag 21. Februar 2005, 00:03

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

Beitragvon Leonidas » Montag 21. Februar 2005, 13:34

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 Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]