Objektorientierte Programmierung in Python
Alex Yarosh
Content Quality Analyst @ DataCamp

# Betrag von jedem Konto in list_of_accounts abheben def batch_withdraw(list_of_accounts, amount): for acct in list_of_accounts: acct.withdraw(amount)b, c, s = BankAccount(1000), CheckingAccount(2000), SavingsAccount(3000) batch_withdraw([b,c,s]) # <-- Verwendet BankAccount.withdraw(), # dann CheckingAccount.withdraw(), # dann SavingsAccount.withdraw()
batch_withdraw() muss nicht prüfen, welches withdraw() aufgerufen wird
Basisklasse sollte ohne Änderungen mit jeder ihrer Unterklassen austauschbar sein
Wo BankAccount funktioniert, sollte auch CheckingAccount funktionieren

Basisklasse sollte ohne Änderungen mit jeder ihrer Unterklassen austauschbar sein
→ Syntaktische Inkompatibilität
BankAccount.withdraw() benötigt 1 Parameter, aber CheckingAccount.withdraw() benötigt 2
→ Unterklasse verschärft Eingabebedingungen
BankAccount.withdraw() akzeptiert jeden Betrag, aber CheckingAccount.withdraw() geht von einem begrenzten Betrag aus
→ Unterklasse schwächt Ausgabebedingungen
BankAccount.withdraw() kann nur ein positives Guthaben hinterlassen oder einen Fehler verursachen, CheckingAccount.withdraw() kann negatives Guthaben hinterlassen
→ Ändern zusätzlicher Attribute in der Methode der Unterklasse
→ Werfen zusätzlicher Ausnahmen in der Methode der Unterklasse
$$\text{\textbf{\Huge{Kein LSP -- Keine Vererbung}}}$$
Objektorientierte Programmierung in Python