Menu
Coddy logo textTech

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 ** 2

Cré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.53975

Remarquez 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 getter

Sortie :

10

Point 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 ** 2

Accédez aux propriétés sans parenthèses :

my_circle = Circle(5)
print(my_circle.radius)  # 5
print(my_circle.area)    # 78.53975

Ajoutez 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 getter

Essayez vous-même

Cette leçon ne comprend pas de défi de code.

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