@rangiurei: Also wenn ich das halbfertige ``print(`` zu ``print(konto)`` ergänze läuft das bei mir durch:
Code: Alles auswählen
betrag wird vom kontostand abgezogen: 100
betrag wird dem kontostand hinzugefügt: 20
aktueller kontostand wird ausgegeben: -80
aktueller geldbestand der Bank wird ausgegeben: 1020
Kontonummer: 45-545697-7, Kontostand: -80 Geldbestand: 1020
betrag wird dem kontostand hinzugefügt: 20
aktueller kontostand wird ausgegeben: 20
aktueller geldbestand der Bank wird ausgegeben: 1020
Kontonummer: 13-873476-3, Kontostand: 20
Ohne Fehlermeldung. Also welche bekommst Du? Wo wird die ausgelöst? Am besten 1:1 die Ausnahme mit Traceback im Beitrag zeigen. Und dann ist die nächste Frage was Du an der Fehlermeldung nicht verstehst, also warum dachtest Du würde die an der Stelle nicht kommen? Was sollte stattdessen passieren?
Ansonsten noch ergänzende Anmerkungen: Die Methode `aktuellerKontostand()` beziehungsweise in der korrekten Schreibweise `aktueller_kontostand()` entsprich a) nicht der Konvention das man Methoden nach der Tätigkeit benennt die sie durchführen (die anderen Methoden machen das) und b) schreibt mal in Python solche trivialen Getter-Methoden nicht. Man kann da einfach auf `kontostand` zugreifen, das ist ja der aktuelle Kontostand. Es macht auch gar keinen Sinn, das Du diese Methode im Hauptprogramm aufrufst, weil Du mit dem Rückgabewert dort überhaupt nichts machst.
Die `print()`-Ausgaben und damit auch die beiden Methoden die dazu da sind was auszugeben gehören auch nicht auf eine `Konto`-Klasse und statt einer Ausgabe wenn etwas nicht funktioniert, sollte man das dem Aufrufer kommunizieren. Letztendlich mit einer Ausnahme, aber für Anfänger vielleicht erst einmal dadurch, dass die Methode über einen Rückgabewert anzeigt ob die Aktion erfolgreich war oder nicht.
An der Ausgabe vom Bankgeldbestand sieht man auch sehr schön, dass der bei Konto-Objekten nichts zu suchen hat, weil der dann ja nicht für die ganze Bank gilt, sondern für jedes Konto separat. Die Krönung wäre noch wenn der Lehrer sich da gedacht hat das sollte man als globale Variable auf der Klasse ”lösen”.
Warum Lehrer/Lehrmaterial immer so einen falschen Unsinn zeigen, den man danach dann wieder verlernen muss, ist mir echt ein Rätsel.
Warum überschreibst Du bei `Pluskonto` die `__str__()`-Methode, wiederholst dort Code der auch schon in der `Konto.__str__()` steht, lässt aber andererseits Informationen weg, so dass die Zeichenkettendarstellung eines `Pluskonto` am Ende weniger Informationen enthält als die vom `Konto`‽ Und auch die `__init__()` kann plötzlich weniger. Es gibt keinen Grund diese beiden Methoden zu überschreiben.
Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
START_GELDBESTAND = 1000
class Konto:
def __init__(
self, kontonummer, kontostand=0, geldbestand=START_GELDBESTAND
):
self.kontonummer = kontonummer
self.kontostand = kontostand
self.geldbestand = geldbestand
def __str__(self):
return (
f"Kontonummer: {self.kontonummer}, Kontostand: {self.kontostand},"
f" Geldbestand: {self.geldbestand}"
)
def abheben(self, betrag):
print("Betrag wird vom Kontostand abgezogen:", betrag)
self.kontostand -= betrag
def einzahlen(self, betrag):
print("Betrag wird dem Kontostand hinzugefügt:", betrag)
self.kontostand += betrag
self.geldbestand += betrag
def kontostand_anzeigen(self):
print("Aktueller Kontostand: ", self.kontostand)
def geldbestand_anzeigen(self):
print("Aktueller Geldbestand der Bank:", self.geldbestand)
class Pluskonto(Konto):
def abheben(self, betrag):
if self.kontostand - betrag < 0:
print("Ihr Saldo ist zu klein!")
else:
Konto.abheben(betrag)
print("Abgehobener Betrag vom Pluskonto: ", betrag)
def main():
konto = Konto("45-545697-7")
konto.abheben(100)
konto.einzahlen(20)
konto.kontostand_anzeigen()
konto.geldbestand_anzeigen()
print(konto)
print("-" * 75)
pluskonto = Pluskonto("13-873476-3")
pluskonto.einzahlen(20)
pluskonto.kontostand_anzeigen()
pluskonto.geldbestand_anzeigen()
print(pluskonto)
if __name__ == "__main__":
main()