Programmazione orientata agli oggetti in Python
Alex Yarosh
Content Quality Analyst @ DataCamp

# Preleva importo da ciascun account 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]) # <-- Userà BankAccount.withdraw(), # poi CheckingAccount.withdraw(), # poi SavingsAccount.withdraw()
batch_withdraw() non ha bisogno di controllare l'oggetto per sapere quale withdraw() chiamare
La classe base deve essere intercambiabile con qualsiasi sua sottoclasse senza alterare le proprietà del programma
Ovunque funzioni BankAccount, dovrebbe funzionare anche CheckingAccount

La classe base deve essere intercambiabile con qualsiasi sua sottoclasse senza alterare le proprietà del programma
→ Incompatibilità sintattica
BankAccount.withdraw() richiede 1 parametro, ma CheckingAccount.withdraw() ne richiede 2
→ Rafforzamento delle condizioni di input nella sottoclasse
BankAccount.withdraw() accetta qualsiasi importo, ma CheckingAccount.withdraw() presume che l'importo sia limitato
→ Indebolimento delle condizioni di output nella sottoclasse
BankAccount.withdraw() può lasciare solo un saldo positivo o causare un errore, CheckingAccount.withdraw() può lasciare il saldo negativo
→ Modifica di attributi aggiuntivi nel metodo della sottoclasse
→ Lancio di eccezioni aggiuntive nel metodo della sottoclasse
$$\text{\textbf{\Huge{No LSP -- No Inheritance}}}$$
Programmazione orientata agli oggetti in Python