OOP Einsteiger Frage

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
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Xfd7887a: Es mag sein, dass du eine Liste mit zwei Elementen erstellst. Die übergebene Liste an sich stellt aber einen einzelnen Wert dar.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Danke, das habe ich ganz übersehen :D
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Antworten