Wiederholung – Bankkontoverwaltung
Teil des Abschnitts Objektorientierte Programmierung der Python-Journey von Coddy. Lektion 16 von 64.
Aufgabe
MittelErstelle eine vollständige BankAccount-Klasse, die Konzepte der objektorientierten Programmierung demonstriert, einschließlich Klassenvariablen, privaten Attributen, Eigenschaften, Gettern, Settern und Methoden.
1. Erstelle eine BankAccount-Klasse mit:
- Einer Klassenvariable
interest_rate, die auf0.02(2 %) gesetzt ist - Privaten Instanzattributen für
__owner_nameund__balance - Einem Konstruktor, der diese Attribute initialisiert
2. Implementiere Getter und Setter für Eigenschaften:
- Eine schreibgeschützte Eigenschaft
owner_name, die den Namen des Kontoinhabers zurückgibt - Eine Eigenschaft
balancemit:- Einem Getter, der den aktuellen Kontostand zurückgibt
- Einem Setter, der Einzahlungen validiert (negative Beträge ablehnt)
- Wenn die Validierung fehlschlägt, gib Folgendes aus:
"Balance cannot be negative"
3. Implementiere Methoden:
deposit(amount), die:- den Kontostand erhöht, wenn der Betrag positiv ist
"Deposit amount must be positive"ausgibt undFalsezurückgibt, wenn der Betrag nicht positiv ist- bei Erfolg
Truezurückgibt
withdraw(amount), die:- den Kontostand verringert, wenn der Betrag positiv ist und ausreichende Mittel vorhanden sind
"Withdrawal amount must be positive"ausgibt undFalsezurückgibt, wenn der Betrag nicht positiv ist"Insufficient funds"ausgibt undFalsezurückgibt, wenn der Betrag den Kontostand überschreitet- bei Erfolg
Truezurückgibt
apply_interest(), die:- Zinsen auf Grundlage des Zinssatzes der Klasse zum Kontostand addiert
- den Zinsbetrag zurückgibt
display_info(), die die Kontodetails in folgendem Format ausgibt:Account Owner: [owner_name] Balance: $[balance] Interest Rate: [interest_rate]%
Anforderungen an das Ausgabeformat
- Alle Validierungsfehlermeldungen müssen genau wie angegeben ausgegeben werden
- Die Methode
display_info()muss die Ausgabe genau wie oben gezeigt formatieren - Der Zinssatz soll als Prozentsatz angezeigt werden (mit 100 multiplizieren)
Probier es selbst
from bank_account import BankAccount
# Testfall-Handler
test_case = input()
if test_case == "account_creation":
# Teste Kontoerstellung
account = BankAccount("Alice", 1000)
print(f"Owner: {account.owner_name}")
print(f"Initial balance: ${account.balance}")
print(f"Interest rate: {BankAccount.interest_rate * 100}%")
elif test_case == "deposit_method":
# Teste Einzahlungsfunktion
account = BankAccount("Bob", 500)
print(f"Initial balance: ${account.balance}")
# Gültige Einzahlung
result = account.deposit(300)
print(f"Deposit result: {result}")
print(f"New balance: ${account.balance}")
# Ungültige Einzahlung
result = account.deposit(-50)
print(f"Negative deposit result: {result}")
print(f"Balance after invalid deposit: ${account.balance}")
elif test_case == "withdraw_method":
# Teste Auszahlungsfunktion
account = BankAccount("Charlie", 1000)
# Gültige Auszahlung
result = account.withdraw(400)
print(f"Withdrawal result: {result}")
print(f"Balance after withdrawal: ${account.balance}")
# Ungültige Auszahlung (negativ)
result = account.withdraw(-50)
print(f"Negative withdrawal result: {result}")
# Ungültige Auszahlung (übersteigt Kontostand)
result = account.withdraw(1000)
print(f"Excessive withdrawal result: {result}")
print(f"Final balance: ${account.balance}")
elif test_case == "property_access":
# Teste Eigenschaftszugriff und Schutz
account = BankAccount("Dave", 800)
print(f"Owner via property: {account.owner_name}")
print(f"Balance via property: ${account.balance}")
# Versuche Kontostand zu setzen (sollte den Setter verwenden)
account.balance = 1200
print(f"Balance after valid setter: ${account.balance}")
# Versuche ungültigen Kontostand
account.balance = -500
print(f"Balance after invalid setter: ${account.balance}")
# Versuche direkt auf private Attribute zuzugreifen (sollte fehlschlagen)
try:
print(account.__owner_name)
except AttributeError:
print("Cannot access private owner_name directly")
elif test_case == "apply_interest":
# Teste Zinsanwendung
account = BankAccount("Eve", 2000)
# Überprüfe ursprünglichen Kontostand
print(f"Initial balance: ${account.balance}")
# Zinsen anwenden
interest_earned = account.apply_interest()
expected_interest = 2000 * 0.02
print(f"Interest earned: ${interest_earned}")
print(f"New balance after interest: ${account.balance}")
print(f"Interest calculation correct: {interest_earned == expected_interest}")
elif test_case == "display_info":
# Teste Format der display_info Methode
account = BankAccount("Frank", 1500)
# Ändere Zinssatz, um Klassenvariable zu testen
original_rate = BankAccount.interest_rate
BankAccount.interest_rate = 0.03
print("Display info output:")
account.display_info()
# Ursprünglichen Zinssatz wiederherstellen
BankAccount.interest_rate = original_rate
elif test_case == "original_test_case":
# Führe den ursprünglichen Testcode aus der Aufgabe aus
account = BankAccount("Coddy", 1000)
# Operationen durchführen
account.deposit(500)
account.withdraw(200)
account.apply_interest()
# Kontoinformationen anzeigen
account.display_info()
# Teste Setter-Validierung
account.balance = 5000
print(f"Balance after setter: ${account.balance}")
# Teste Auszahlungs-Validierung
account.withdraw(10000)
print(f"Final balance: ${account.balance}")Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktormethode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDie super()-FunktionMethodenüberschreibungMehrfachvererbungMethodenauflösungsreihenfolgeWiederholung – Mitarbeiterhierarchie7Spezielle Methoden
Einführung in magische MethodenOperatorüberladungMagische Methoden für ContainerRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungsservice2Dekoratoren
Einführung in DekoratorenProperty-DekoratorDekorator für statische MethodenDekorator für Klassenmethoden5Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypingAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische Methoden und KlassenmethodenKlassen-DekoratorenKontextmanager3Klassenattribute
Instanz- vs. KlassenvariablenProperty-DecoratorsPrivate AttributeWiederholung – Bankkontoverwaltung6Kapselung
Öffentliche, geschützte, private MemberZugriffsmodifikatorenInformationsverbergungProperty-Decorators – FortgeschrittenWiederholung – System zur Verwaltung von Studentendaten12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und BenutzerklassenAusleihsystemSuchfunktionAdministrationsoberflächeTests und IntegrationÜbe selbstständig: Online-Python-Compiler