Hallo,
na gut, Deine Anmerkungen zu meinem Code sind ja eigentlich auch nicht schlecht.
Hyperion hat geschrieben:Ein Kunde hat einen Kontostand?
Stimmt, das ist etwas unglücklich. Das hatte ich noch von derrick übernommen. Die Klasse sollte wohl eher "Konto" heißen, und statt "self.name", dann "self.inhaber" oder so.
Ich hab' Programmieren ja nicht in der Schule oder an der Uni gelernt, sondern mir diese Sachen selbst angelesen. Dabei komme ich von Sprachen ohne OOP: Früher 8-bit BASIC, dann C (das aber für mich zu schmerzhaft war). Jedenfalls hatte ich immer große Mühe, OOP zu verstehen und auch zu wollen. Bei den Grundlagen geht es jetzt einigermaßen, aber die höhere Theorie ist mir immer noch fremd. Ich mag auch Platon nicht, sondern eher Aristoteles, Kant und die Chinesen (
Konfuzius usw.).
Bei Klassen hatte ich einmal das Gefühl, das mit der "Abbildung der Wirklichkeit" sei doch alles nur Gerede. In Wirklichkeit ist eine Klasse technisch einfach nur ein Container, der einige Variablen und Funktionen enthält, die man dann über Instanzen der Klasse ansprechen kann. Interessanterweise habe ich bemerkt, daß diese Sichtweise in Perl auch so umgesetzt wurde: Dort ist eine Klasse ein spezielles "
package", wobei ein solches package einfach einen Namensraum definiert und eigentlich dazu gedacht ist, Module zu schreiben.
Aus dieser Sichtweise heraus ist der Name des Containers nicht so wichtig, es ist mehr oder weniger egal, ob der nun "Kunde" oder "Konto" heißt.
An dieser Stelle stehe ich gerade. Und komme ganz gut damit aus. Aber ich schreibe keine saubere OOP. Und weiß auch nicht, ob ich das lernen muß und will. Vielleicht könnt ihr mir etwas Literatur empfehlen (denn "Python GE-Packt", das ich sonst (trotz leichter und vereinzelter Ungenauigkeiten) sehr schätze, ist an dieser Stelle leider etwas dünn)?
Hyperion hat geschrieben:Du missbrauchst eine Klasse als Modul (`__init__` sieht verdammt grausig aus!)
Ok, nach dem oben gesagten, verstehst Du das jetzt vielleicht etwas besser. Obwohl Du's wahrscheinlich immer noch kritisieren wirst.
Hyperion hat geschrieben:kein PEP8 (speziell Methodennamen)
Na ja, man kann nicht alles haben.
Hyperion hat geschrieben:zu viel Mischung von Benutzerinteraktion und Logik. Eingaben sollte man davon trennen; gegebenenfalls sogar außerhalb der Klasse erledigen
Immerhin hab' ich das mit ".getChoice()" schon ein bißchen versucht. Würdest Du das wirklich auch für ganz einfache Eingaben strikt umsetzen?
Hyperion hat geschrieben:über `eur` (Name? Klingt nach Mnemonic
) müsste man nen eigenen Thread aufmachen
Ja, mach' ich wohl bald mal. Die Frage kommt sowieso immer wieder mal. Manche empfehlen da wohl das "locale"-Modul, aber warum sollte man nicht eine eigene kleine Funktion schreiben, die man vollständig unter Kontrolle hat, während man bei dem "locale"-Modul erst sicherstellen muß, daß auch wirklich die richtigen locales eingestellt sind? Für Perl gibt es gleich mehrere
Module zur Währungsumwandlung. Es scheint nicht so ganz einfach zu sein, daß für viele Fälle richtig hinzubekommen. Bei meiner Funktion dagegen weiß ich, was sie tut und was man als Rückgabewert erwarten kann. Ich finde das praktischer so. Auch wenn man sie vielleicht noch besser schreiben könnte.
Insgesamt würde mich aber schon interessieren, wie Du das denn mit "richtiger OOP", PEP 8, Pi-pa-po, usw. in orthodoxem Python schreiben würdest.
pillmuncher hat ja auch schon einen Vorschlag gemacht, den ich aber schon vom Konzept her leider kaum nachvollziehen kann (obwohl er bestimmt gut ist, das will ich gar nicht bestreiten).
Aber wichtiger als mein Code war mir eigentlich auch das, was die Aufgabe meiner Meinung nach zeigen sollte (was ich in dem anderen Posting weiter oben beschrieben hatte). Es ist doch erstaunlich, daß hier seitenweise diskutiert wurde, aber dazu bisher niemand etwas geschrieben zu haben scheint.
Gruß