Menu
Coddy logo textTech

Décorateurs de propriété

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

Les décorateurs de propriété vous permettent de contrôler la façon dont les attributs sont accédés et modifiés, tout en conservant la syntaxe simple des attributs.

Voici un exemple d'une classe avec un accesseur de propriété (getter) :

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age

Utilisez la propriété comme un attribut ordinaire :

person = Person("Alice", 30)
print(person.age)

Sortie :

30

Remarquez que vous accédez à age sans parenthèses, même s'il appelle en réalité une méthode.

Ajoutez un setter pour valider les données lors de la définition des valeurs :

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

Maintenant, vous pouvez définir l'âge avec une validation automatique :

person = Person("Alice", 30)
person.age = 31     # Utilise le setter avec validation
print(person.age)   # Utilise le getter

# Ceci lèverait une erreur :
# person.age = -5   # ValueError: L'âge ne peut pas être négatif

Sortie :

31

Créez des propriétés calculées qui calculent des valeurs :

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    @property
    def area(self):
        return self.width * self.height

rect = Rectangle(5, 3)
print(rect.area)  # Calcule 5 * 3 = 15

Sortie :

15

Point clé : Les décorateurs de propriété font en sorte que les méthodes ressemblent à des attributs. Utilisez @property pour les getters et @attribute_name.setter pour les setters. Cela permet la validation des données et les valeurs calculées tout en conservant une syntaxe simple d'accès aux attributs.

challenge icon

Défi

Moyen

Complétez la classe Temperature dans temperature.py qui convertit entre Celsius et Fahrenheit. Ensuite, utilisez cette classe dans driver.py pour tester les conversions de température. Suivez les commentaires TODO dans les deux fichiers pour des instructions étape par étape.

Aide-mémoire

Les décorateurs de propriété vous permettent de contrôler la manière dont les attributs sont accédés et modifiés tout en conservant une syntaxe d'attribut simple.

Utilisez @property pour les méthodes getter :

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age

person = Person("Alice", 30)
print(person.age)  # Accès comme un attribut, pas de parenthèses

Utilisez @attribute_name.setter pour les méthodes setter avec validation :

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

person = Person("Alice", 30)
person.age = 31  # Utilise le setter avec validation

Créez des propriétés calculées qui calculent des valeurs :

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    @property
    def area(self):
        return self.width * self.height

rect = Rectangle(5, 3)
print(rect.area)  # Calcule 5 * 3 = 15

Essayez vous-même

# TODO: Importer la classe Temperature depuis le module temperature

# Tester la classe :
# TODO: Créer une instance de température à 25°C
temp = None  # Remplacer par une instance réelle de Temperature

# TODO: Afficher les valeurs en Celsius et en Fahrenheit
# TODO: Utiliser le format : "25.0°C is 77.0°F"

# TODO: Régler la température à 98.6°F

# TODO: Afficher à nouveau les deux valeurs pour confirmer que la conversion fonctionne
# TODO: Utiliser le même format que précédemment
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