Personnaliser la fonctionnalité via l'héritage

Programmation orientée objet en Python

Alex Yarosh

Content Quality Analyst @ DataCamp

une hiérarchie de classes de compte

Programmation orientée objet en Python

Ce que nous avons jusqu'à présent

class BankAccount:
    def __init__(self, balance):
       self.balance = balance

    def withdraw(self, amount):
       self.balance -=amount

# Classe vide héritée de BankAccount
class SavingsAccount(BankAccount):
    pass
Programmation orientée objet en Python

Personnaliser les constructeurs

class SavingsAccount(BankAccount):    

    # Constructeur spécifique pour SavingsAccount avec un paramètre supplémentaire
    def __init__(self, balance, interest_rate):  

# Appeler le constructeur parent en utilisant ClassName.__init__() BankAccount.__init__(self, balance) # <--- self est un SavingsAccount mais aussi un BankAccount
# Ajouter plus de fonctionnalités self.interest_rate = interest_rate
  • Peut exécuter d'abord le constructeur de la classe parente par Parent.__init__(self, args...)
  • Ajouter plus de fonctionnalités
  • Pas obligé d'appeler les constructeurs parents
Programmation orientée objet en Python

Créer des objets avec un constructeur personnalisé

# Construire l'objet en utilisant le nouveau constructeur
acct = SavingsAccount(1000, 0.03)
acct.interest_rate
0.03
Programmation orientée objet en Python

Ajouter des fonctionnalités

  • Ajouter des méthodes comme d'habitude
  • Peut utiliser les données de la classe parente et de la classe enfant
class SavingsAccount(BankAccount):    

  def __init__(self, balance, interest_rate): 
     BankAccount.__init__(self, balance) 
     self.interest_rate = interest_rate

  # Nouvelle fonctionnalité
  def compute_interest(self, n_periods = 1):
     return self.balance * ( (1 + self.interest_rate) ** n_periods - 1)

Programmation orientée objet en Python

une hiérarchie de classes de compte

Programmation orientée objet en Python

Personnalisation des fonctionnalités

class CheckingAccount(BankAccount):

def __init__(self, balance, limit): BankAccount.__init__(self, balance) self.limit = limit
def deposit(self, amount): self.balance += amount
def withdraw(self, amount, fee=0):
if fee <= self.limit: BankAccount.withdraw(self, amount + fee) else: BankAccount.withdraw(self, amount + self.limit)
  • Peut modifier la signature (ajouter des paramètres)
  • Utiliser Parent.method(self, args...) pour appeler une méthode de la classe parente
Programmation orientée objet en Python
check_acct = CheckingAccount(1000, 25)

# Appellera withdraw de CheckingAccount
check_acct.withdraw(200)
# Appellera withdraw de CheckingAccount
check_acct.withdraw(200, fee=15)
bank_acct = BankAccount(1000)

# Appellera withdraw de BankAccount
bank_acct.withdraw(200)
# Provoquera une erreur
bank_acct.withdraw(200, fee=15)
TypeError: withdraw() a reçu un argument
 inattendu 'fee'
Programmation orientée objet en Python

Passons à la pratique !

Programmation orientée objet en Python

Preparing Video For Download...