Seite 1 von 1
Mit Objektmethode Daten an ein anderes Objekt übergeben
Verfasst: Dienstag 5. Oktober 2010, 09:52
von hal42
Hallo,
es ist soweit - als Frischling traue ich mich nun hier nach einer Antwort zu suchen, die ich woanders nicht finden konnte.
Kann man mit einer Objektmethode, Daten aus dem selben Objekt, an ein anderes Objekt übergeben?
Ich habe eine Klasse "BankKonto" erstellt. In der Klasse habe ich Methoden definiert wie "einzahlen" und "abheben". Nun möchte ich noch eine Methode "ueberweisen" erstellen.
Aber wie stelle ich es an, dass das Objekt "meinKonto", welches natürlich über eine Kontonummer verfügt, Geld auf "deinKonto" überweisen kann?
Woher soll dass eine Objekt von der Existenz des anderen Objekt wissen?
Re: Mit Objektmethode Daten an ein anderes Objekt übergeben
Verfasst: Dienstag 5. Oktober 2010, 10:07
von EyDu
Hallo!
Alles was du an einen Namen binden kannst, kannst du auch als Parameter übergeben. Ich würde hier aber nicht Geld zwischen Konten überweisen lassen. Da bietet sich doch geradezu das Bank-Objekt an, welches Geld vom einen Konto abhebt und auf das andere überweist. So müssen Konten nichts von einander wissen.
Sebastian
Re: Mit Objektmethode Daten an ein anderes Objekt übergeben
Verfasst: Dienstag 5. Oktober 2010, 11:37
von hal42
Danke für den Denkanstoß!
Meine Methode sieht nun so aus und funktioniert wie gewünscht:
Code: Alles auswählen
def ueberweisen(self, betrag, konto):
if self.kontonummer == konto.kontonummer:
print "Es kann nicht auf das selbe Konto überweisen werden!"
else:
self.abheben(betrag)
konto.einzahlen(betrag)
print "Auf das Konto mit der Nummer", konto.kontonummer, \
"wurden", betrag, "Euro", \
"vom Konto mit der Nummer", self.kontonummer, "überwiesen."
Mit einer "Bank" Klasse habe ich mal kurz rumgespielt, verwirrt mich aber noch zu sehr...
Sollte die Klasse "BankKonto" dann von "Bank" erben?
Welche Attribute und Methoden würdest Du den Klassen geben?
Re: Mit Objektmethode Daten an ein anderes Objekt übergeben
Verfasst: Dienstag 5. Oktober 2010, 12:20
von BlackJack
@hal42: Vererbung bildet "ist ein(e)"-Beziehungen ab und ein Konto ist keine Bank. Also sollte Konto auch keine Unterklasse von Bank sein.
Du vermischt in der Methode übrigens Programmlogik und Benutzerinteraktion sehr stark und der aufrufende Code hat keine vernünftige Möglichkeit Fehler mitzubekommen. Eine unerlaubte Aktion sollte zu einer Ausnahme führen und die ``print``-Ausgaben wären eher Aufgabe des aufrufenden Codes.
Je nach dem wie die "Welt" aussieht, die man da modelliert, könnte die Überprüfung der Kontonummer falsch sein, denn es kann ja durchaus die gleiche Kontonummer bei verschiedenen Banken geben und da wäre eine Überweisung möglich.
Was eine Bank für Attribute und Methoden hat, hängt ganz davon ab was Du im Programm abbilden willst. Das ist immer so ein Problem mit "sinnlosen" Übungsprojekten, man kann das beliebig kompliziert machen und es gibt bei vielen Entscheidungen kein "richtig" oder "falsch" sondern nur ein "anders".
Wenn Du Konten hast, dann wird eine Bank die intern irgendwie verwalten. Vielleicht hat sie auch einen Namen. Und eine Bankleitzahl. Dann könnte vielleicht auch schon eine `Banken`-Klasse Sinn machen, wo die verschiedenen Banken verwaltet werden. Eine Bank könnte auch "eigene" Konten und eine Bargeldreserve haben. Und die Möglichkeit Daueraufträge zu verwalten und auszuführen. Sparbücher, Aktienkurse, Bankfilialen, Geldautomaten, Bankräuber, und so weiter. Kann man wie gesagt, beliebig kompliziert gestalten. Spätestens wenn das Thema Finanzkrise in den Entwurf Einzug hält, sollte man das Geld in Cents und als ganze Zahlen speichern, denn die können in Python "beliebig" gross werden, so dass man keine Sorgen haben muss die Rettungspakete für die armen notleidenden Banken nicht mehr mit dem beschränkten Wertebereich von `float`\s darstellen zu können.

Re: Mit Objektmethode Daten an ein anderes Objekt übergeben
Verfasst: Dienstag 5. Oktober 2010, 12:54
von hal42
Spätestens wenn das Thema Finanzkrise in den Entwurf Einzug hält, sollte man das Geld in Cents und als ganze Zahlen speichern, denn die können in Python "beliebig" gross werden, so dass man keine Sorgen haben muss die Rettungspakete für die armen notleidenden Banken nicht mehr mit dem beschränkten Wertebereich von `float`\s darstellen zu können.
Verdammt, Du hast recht!

An was man alles Denken muss!
Du vermischt in der Methode übrigens Programmlogik und Benutzerinteraktion sehr stark und der aufrufende Code hat keine vernünftige Möglichkeit Fehler mitzubekommen. Eine unerlaubte Aktion sollte zu einer Ausnahme führen und die ``print``-Ausgaben wären eher Aufgabe des aufrufenden Codes.
Du meinst, ich sollte die print-Zeilen besser weg lassen und dafür true, false oder so per return zurückgeben, oder habe ich Dich falsch verstanden?
wenn ja, hilft mir vielleicht ein kleines Beispiel weiter.
Danke!
Re: Mit Objektmethode Daten an ein anderes Objekt übergeben
Verfasst: Dienstag 5. Oktober 2010, 14:26
von BlackJack
@hal42: Bei `ueberweisen()` würde ich weder eine Textausgabe noch einen Rückgabewert erwarten. Aber wenn etwas schief läuft halt eine Ausnahme, damit man darauf auf der entsprechenden Aufrufebene reagieren kann.