Seite 1 von 1

OOP Einsteiger Frage

Verfasst: Donnerstag 3. Juli 2014, 16:52
von Xfd7887a
Beim Versuch mich in die OOP einzuarbeiten habe ich folgendes Skript geschrieben: https://github.com/toxinman/stuff/blob/ ... rechner.py Leider erscheint folgende Fehlermeldung, die ich nicht ganz nachvollziehen kann:

Code: Alles auswählen

Traceback (most recent call last):
  File "umrechner.py", line 41, in <module>
    main()
  File "umrechner.py", line 34, in main
    strecke1 = Strecke(eingabe_auswerten(raw_input("> ")))
TypeError: __init__() takes exactly 3 arguments (2 given)
Ja, die Methode __init__ verlangt 3 Argumente. Aber ich dachte, dass man self nicht mehr übergeben muss?

Re: OOP Einsteiger Frage

Verfasst: Donnerstag 3. Juli 2014, 17:07
von EyDu
Xfd7887a hat geschrieben:Ja, die Methode __init__ verlangt 3 Argumente. Aber ich dachte, dass man self nicht mehr übergeben muss?
Musst du auch nicht. Trotzdem hat die __init__-Methode drei Argumente, von denen du zwei setzen musst. Du übergist aber nur einen Wert.

Re: OOP Einsteiger Frage

Verfasst: Donnerstag 3. Juli 2014, 17:25
von snafu
@Xfd7887a: Es mag sein, dass du eine Liste mit zwei Elementen erstellst. Die übergebene Liste an sich stellt aber einen einzelnen Wert dar.

Re: OOP Einsteiger Frage

Verfasst: Donnerstag 3. Juli 2014, 17:39
von Xfd7887a
Danke, das habe ich ganz übersehen :D

Re: OOP Einsteiger Frage

Verfasst: Donnerstag 3. Juli 2014, 17:48
von snafu
Das Parsen der Ausgabe könnte man übrigens noch ein bißchen benutzerfreundlicher beim Auftreten von Fehlern gestalten. Anstatt die Streckenklasse Strings umwandeln zu lassen, sollte man dies besser in den Parservorgang stecken, damit man gleich passende Typen aus dem String erhält. Mit "benutzerfreundlich" meine ich, dass geprüft wird, ob exakt zwei Elemente herauskommen (sonst Fehler) und dass gemeckert wird, wenn sich diese Elemente nicht in eine Zahl umwandeln lassen (weil die Eingabe aus unerwarteten Zeichen bestand).

EDIT: Natürlich muss nur das erste Element in eine Zahl umgewandelt werden. Das zweite Element bleibt ja ein String und da würde ich auch keine weiteren Prüfungen vornehmen. Konkrete Werteprüfungen (also ob die Masseinheit bekannt ist) gehören IMHO eher in die Klasse.

Re: OOP Einsteiger Frage

Verfasst: Donnerstag 3. Juli 2014, 18:40
von Sirius3
@Xfd7887a: warum fangen Deine Attribute mit zwei '__' an? Wenn ich zwei Strecken addiere, erwarte ich wieder eine Strecke und nicht eine Zahl als Rückgabewert. Du solltest noch eine __str__-Methode einführen, dann kannst Du die Ausgabe auch klarer schreiben.