Programmation orientée objet en 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() n'a pas besoin d'inspecter l'objet pour savoir quel withdraw() appeler
La classe de base doit être interchangeable avec n'importe laquelle de ses sous-classes sans modifier les propriétés du programme
Partout où BankAccount fonctionne, CheckingAccount devrait fonctionner aussi

La classe de base doit être interchangeable avec n'importe laquelle de ses sous-classes sans modifier les propriétés du programme
→ Incompatibilité syntaxique
BankAccount.withdraw() exige 1 paramètre, mais CheckingAccount.withdraw() en exige 2
→ Renforcement des conditions d'entrée par la sous-classe
BankAccount.withdraw() accepte tout montant, mais CheckingAccount.withdraw() suppose que le montant est limité
→ Affaiblissement des conditions de sortie par la sous-classe
BankAccount.withdraw() ne peut laisser qu'un solde positif ou lever une erreur, CheckingAccount.withdraw() peut laisser un solde négatif
→ Modifier des attributs supplémentaires dans la méthode de la sous-classe
→ Lancer des exceptions supplémentaires dans la méthode de la sous-classe
$$\text{\textbf{\Huge{Pas de LSP — pas d'héritage}}}$$
Programmation orientée objet en Python