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 ** 2Notez 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.53975Remarquez 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 getterSortie :
10Point 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.
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
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 bancaire