Menu
CoddyTech

Décorateurs de propriété

Fait partie de la section Programmation orientée objet du Journey Python de Coddy. Leçon 14 sur 64.

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

Voici un exemple de classe avec un accesseur de propriété :

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

Remarque que tu accèdes à age sans parenthèses, même si cela 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, tu peux 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

# Cela provoquerait une erreur :
# person.age = -5   # ValueError: L’âge ne peut pas être négatif

Résultat :

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

Résultat :

15

Point clé : les décorateurs de propriété font ressembler les méthodes à des attributs. Utilisez @property pour les accesseurs et @attribute_name.setter pour les mutateurs. Cela permet la validation des données et le calcul de valeurs tout en conservant une syntaxe simple d’accès aux attributs.

challenge icon

Défi

Moyen

Complète la classe Temperature dans temperature.py pour effectuer des conversions entre Celsius et Fahrenheit. Utilise ensuite cette classe dans driver.py pour tester les conversions de température. Suis les commentaires TODO dans les deux fichiers pour obtenir des instructions étape par étape.

Affiche chaque conversion sous la forme [celsius]°C is [fahrenheit]°F, avec la valeur Celsius exactement telle qu’elle a été donnée et la valeur Fahrenheit telle que Python la calcule. N’arrondis pas les nombres et ne les formate pas. Les deux lignes produites par le pilote sont :

25°C is 77.0°F
37.0°C is 98.6°F

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 véritable instance de Temperature

# TODO: Afficher les valeurs en Celsius et en Fahrenheit
# TODO: Utiliser le format : "25°C is 77.0°F" (afficher les deux valeurs telles quelles, sans arrondi ni mise en forme)

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

# TODO: Afficher à nouveau les deux valeurs pour vérifier 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 Programmation orientée objet

Entraînez-vous par vous-même : Compilateur Python en ligne