Leçon 7 / 9 — Chapitre 3: POO : méthodes spéciales, propriétés et dataclasses
Un setter avec @property.setter
Une propriété (vue à la leçon précédente) est en lecture seule par défaut : tenter p.valeur_stock = 200 lèverait une erreur. @nom.setter autorise l'écriture, en y ajoutant au passage une validation.
class Produit:
def __init__(self, prix):
self._prix = prix
@property
def prix(self):
return self._prix
@prix.setter
def prix(self, nouvelle_valeur):
if nouvelle_valeur < 0:
raise ValueError("Le prix ne peut pas etre negatif")
self._prix = nouvelle_valeur
p = Produit(5)
p.prix = 8
print(p.prix)
Ce code affiche 8 : p.prix = 8 déclenche le setter (@prix.setter), qui valide la nouvelle valeur avant de l'affecter à self._prix — l'attribut réel est stocké sous un nom préfixé d'un underscore (_prix), une convention indiquant qu'il ne doit pas être manipulé directement.
p.prix = -3
Ce code lève une ValueError, car le setter refuse toute valeur négative avant même de modifier self._prix — un accès direct à un attribut normal (vu au premier chapitre) ne permettrait jamais cette vérification automatique.
À vous de jouer : ajoutez un setter à une propriété qui refuse une valeur négative avec raise ValueError, puis testez-le avec une valeur valide et une invalide.
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 87 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès