Programare orientată pe obiecte în 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() nu trebuie să verifice obiectul pentru a ști ce withdraw() să apeleze
Clasa de bază trebuie să fie interschimbabilă cu oricare dintre subclasele sale, fără a modifica proprietățile programului
Oriunde funcționează BankAccount, CheckingAccount ar trebui să funcționeze la fel

Clasa de bază trebuie să fie interschimbabilă cu oricare dintre subclasele sale, fără a modifica proprietățile programului
→ Incompatibilitate sintactică
BankAccount.withdraw() necesită 1 parametru, dar CheckingAccount.withdraw() necesită 2
→ Subclasa întărește condițiile de intrare
BankAccount.withdraw() acceptă orice sumă, dar CheckingAccount.withdraw() presupune că suma este limitată
→ Subclasa slăbește condițiile de ieșire
BankAccount.withdraw() poate lăsa doar sold pozitiv sau genera o eroare, CheckingAccount.withdraw() poate lăsa soldul negativ
→ Modificarea unor atribute suplimentare în metoda subclasă
→ Aruncarea unor excepții suplimentare în metoda subclasă
$$\text{\textbf{\Huge{No LSP -- No Inheritance}}}$$
Programare orientată pe obiecte în Python