Exemples — POO
Classe complète avec propriétés et validation
class CompteBancaire:
def __init__(self, titulaire, solde=0):
self.titulaire = titulaire
self._solde = solde
@property
def solde(self):
return self._solde
def deposer(self, montant):
if montant <= 0:
raise ValueError("le montant doit être positif")
self._solde += montant
def retirer(self, montant):
if montant > self._solde:
raise ValueError("solde insuffisant")
self._solde -= montant
def __repr__(self):
return f"CompteBancaire({self.titulaire!r}, {self._solde})"
def __eq__(self, autre):
if not isinstance(autre, CompteBancaire):
return NotImplemented # laisse Python essayer l'opération inverse
return (self.titulaire, self._solde) == (autre.titulaire, autre._solde)
def __hash__(self):
return hash((self.titulaire, self._solde)) # définir __eq__ annule le __hash__ par défaut
Héritage et polymorphisme
class Animal:
def __init__(self, nom):
self.nom = nom
def parler(self):
raise NotImplementedError
class Chien(Animal):
def parler(self):
return f"{self.nom} aboie"
class Chat(Animal):
def parler(self):
return f"{self.nom} miaule"
for animal in [Chien("Rex"), Chat("Milo")]:
print(animal.parler())
Classe itérable
class Plage:
def __init__(self, debut, fin):
self.debut = debut
self.fin = fin
def __iter__(self):
n = self.debut
while n < self.fin:
yield n
n += 1
for x in Plage(0, 5):
print(x)
Composition plutôt qu'héritage
class Moteur:
def demarrer(self):
return "vroum"
class Voiture:
def __init__(self):
self.moteur = Moteur() # a-un Moteur, plutôt qu'hérite de Moteur
def demarrer(self):
return self.moteur.demarrer()