Programmation orientée objet en Python
Alex Yarosh
Content Quality Analyst @ DataCamp

# Retirer un montant de chaque compte dans 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]) # <-- Utilisera BankAccount.withdraw(), # puis CheckingAccount.withdraw(), # puis SavingsAccount.withdraw()
batch_withdraw() n'a pas besoin de vérifier l'objet pour savoir quel withdraw() appeler
La classe de base doit être interchangeable avec ses sous-classes sans altérer les propriétés du programme
Partout où BankAccount fonctionne, CheckingAccount doit aussi fonctionner

La classe de base doit être interchangeable avec ses sous-classes sans altérer les propriétés du programme
→ Incompatibilité syntaxique
BankAccount.withdraw() nécessite 1 paramètre, mais CheckingAccount.withdraw() en nécessite 2
→ Renforcement des conditions d'entrée par la sous-classe
BankAccount.withdraw() accepte n'importe quel 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 provoquer une erreur, CheckingAccount.withdraw() peut laisser un solde négatif
→ Modification d'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 PSL -- Pas d'héritage}}}$$
Programmation orientée objet en Python