PaliSkill
Python avancé

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