Object-Oriented Programming in 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() nepotřebuje kontrolovat objekt, aby věděl, které withdraw() zavolat
Základní třída musí být zaměnitelná s libovolnou podtřídou, aniž by se změnily vlastnosti programu
Kdekoli funguje BankAccount, musí fungovat i CheckingAccount

Základní třída musí být zaměnitelná s libovolnou podtřídou, aniž by se změnily vlastnosti programu
→ Syntaktická nekompatibilita
BankAccount.withdraw() vyžaduje 1 parametr, ale CheckingAccount.withdraw() vyžaduje 2
→ Podtřída posiluje vstupní podmínky
BankAccount.withdraw() přijímá libovolnou částku, ale CheckingAccount.withdraw() předpokládá omezení částky
→ Podtřída oslabuje výstupní podmínky
BankAccount.withdraw() zanechá kladný zůstatek nebo vyvolá chybu, CheckingAccount.withdraw() může zanechat záporný zůstatek
→ Změna dalších atributů v metodě podtřídy
→ Vyvolání dalších výjimek v metodě podtřídy
$$\text{\textbf{\Huge{No LSP -- No Inheritance}}}$$
Object-Oriented Programming in Python