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és vous permettent de contrôler la façon dont les attributs sont consultés et modifiés, tout en conservant une syntaxe simple pour les attributs.
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._ageUtilisez la propriété comme un attribut ordinaire :
person = Person("Alice", 30)
print(person.age)Résultat :
30Remarque que tu accèdes à age sans parenthèses, même si cela revient en réalité à appeler 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 = valueVous pouvez maintenant 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égatifSortie :
31Cré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 = 15Résultat :
15Point 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.
Défi
MoyenComplétez la classe Temperature dans temperature.py, qui convertit les températures entre Celsius et Fahrenheit. Utilisez ensuite cette classe dans driver.py pour tester les conversions de température. Suivez les commentaires TODO dans les deux fichiers pour les instructions étape par étape.
Affichez chaque conversion sous la forme [celsius]°C is [fahrenheit]°F, avec la valeur en Celsius exactement telle qu’elle a été donnée et la valeur en Fahrenheit telle que Python la calcule. N’arrondissez pas les nombres et ne leur appliquez aucun formatage. Les deux lignes produites par le pilote sont :
25°C is 77.0°F
37.0°C is 98.6°FEssayez 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 à 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édemmentCette 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
1Les fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe paramètre selfMéthodesAttributsMéthode constructeur (__init__)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLa fonction super()Redéfinition de méthodeHéritage multipleOrdre de résolution des méthodesRécapitulatif - Hiérarchie des employés7Méthodes spéciales
Introduction aux méthodes magiquesSurcharge d'opérateursMéthodes magiques de conteneurRécapitulatif - Liste personnalisée10Patrons de conception, Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy2Décorateurs
Introduction aux décorateursDécorateur de propriétéDécorateur de méthode statiqueDécorateur de méthode de classe5Polymorphisme
Retour sur la redéfinition de méthodeDuck TypingClasses et méthodes abstraitesConception d'interfacesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageMixinsMéthodes statiques et de classeDécorateurs de classeGestionnaires de contexte11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Propriétés de classe
Variables d'instance vs variables de classeDécorateurs de propriétéAttributs privésRécapitulatif - Gestionnaire de compte bancaireEntraînez-vous par vous-même : Compilateur Python en ligne