Menu
Coddy logo textTech

Décorateur de propriété

Fait partie de la section Object Oriented Programming du Journey Python de Coddy — leçon 10 sur 64.

Le décorateur @property vous permet d'accéder aux méthodes comme à des attributs, offrant un moyen propre de lire et modifier des valeurs. C'est utile pour l'encapsulation, vous permettant d'ajouter de la logique de validation ou des valeurs calculées sans modifier l'interface publique de votre classe.

Voici un exemple de classe utilisant @property :

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2

Notez que nous utilisons self._radius pour stocker la valeur réelle. Si nous utilisions self.radius à l'intérieur du getter, cela appellerait à nouveau la méthode getter, menant à une récursion infinie.

Créez un cercle et accédez aux propriétés :

my_circle = Circle(5)

Accédez aux propriétés comme à des attributs ordinaires :

print(my_circle.radius)
print(my_circle.area)

Sortie :

5
78.53975

Remarquez que vous n'utilisez pas de parenthèses () lors de l'accès aux propriétés : elles ressemblent à des attributs mais exécutent le code d'une méthode.

Ajoutez un setter pour permettre la modification des valeurs avec validation :

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @radius.setter
    def radius(self, value):
        if value > 0:
            self._radius = value
        else:
            print("Radius must be positive!")

Vous pouvez maintenant définir le radius comme un attribut :

my_circle = Circle(5)
my_circle.radius = 10  # Uses the setter
print(my_circle.radius)  # Uses the getter

Sortie :

10

Point clé : @property fait apparaître les méthodes comme des attributs, tandis que @property_name.setter vous permet de contrôler la manière dont les valeurs sont assignées, rendant possibles la validation des données et l'encapsulation.

Essayez vous-même

Cette leçon ne comprend pas de défi de code.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Object Oriented Programming