Objektorienterad programmering i Python
Alex Yarosh
Content Quality Analyst @ DataCamp

# Withdraw amount from each of accounts in list_of_accounts 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]) # <-- Will use BankAccount.withdraw(), # then CheckingAccount.withdraw(), # then SavingsAccount.withdraw()
batch_withdraw() behöver inte kontrollera objektet för att veta vilken withdraw() som ska anropas
Basklassen ska vara utbytbar mot vilken som helst av dess underklasser utan att programmets egenskaper förändras
Överallt där BankAccount fungerar ska CheckingAccount också fungera

Basklassen ska vara utbytbar mot vilken som helst av dess underklasser utan att programmets egenskaper förändras
→ Syntaktisk inkompatibilitet
BankAccount.withdraw() kräver 1 parameter, men CheckingAccount.withdraw() kräver 2
→ Underklass skärper invillkor
BankAccount.withdraw() accepterar vilket belopp som helst, men CheckingAccount.withdraw() förutsätter att beloppet är begränsat
→ Underklass försvagar utvillkor
BankAccount.withdraw() kan bara lämna ett positivt saldo eller orsaka ett fel, medan CheckingAccount.withdraw() kan lämna saldot negativt
→ Ändrar ytterligare attribut i underklassens metod
→ Kastar ytterligare undantag i underklassens metod
$$\text{\textbf{\Huge{No LSP -- No Inheritance}}}$$
Objektorienterad programmering i Python