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 à des méthodes comme à des attributs, offrant ainsi un moyen élégant d'obtenir et de définir des valeurs.
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 ** 2Créez un cercle et accédez aux propriétés :
my_circle = Circle(5)Accédez aux propriétés comme s'il s'agissait d'attributs classiques :
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 :
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!")Maintenant, vous pouvez définir le rayon comme un attribut :
my_circle = Circle(5)
my_circle.radius = 10 # Utilise le setter
print(my_circle.radius) # Utilise le getterSortie :
10Point clé : @property permet aux méthodes de ressembler à des attributs, tandis que @property_name.setter vous permet de contrôler la manière dont les valeurs sont assignées.
Aide-mémoire
Le décorateur @property vous permet d'accéder aux méthodes comme à des attributs, offrant ainsi un moyen propre d'obtenir et de définir des valeurs.
Utilisation basique des propriétés :
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 ** 2Accédez aux propriétés sans parenthèses :
my_circle = Circle(5)
print(my_circle.radius) # 5
print(my_circle.area) # 78.53975Ajoutez un setter pour contrôler l'assignation des valeurs :
@radius.setter
def radius(self, value):
if value > 0:
self._radius = value
else:
print("Radius must be positive!")Définissez des valeurs comme des attributs :
my_circle.radius = 10 # Utilise le setter
print(my_circle.radius) # Utilise le getterEssayez 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