Fonction Python property()

Python3 内置函数Fonctions intégrées de Python3


property()C'est une fonction intégrée de Python utilisée pour créer des propriétés.

property est un mécanisme puissant qui nous permet d'exécuter du code lors de l'accès aux attributs. Il est souvent utilisé pour implémenter des fonctionnalités avancées telles que les propriétés calculées et la validation des données.

Définitions de mots: property 意为"属性",用于定义类的属性。


Syntaxe de base et paramètres

Format de syntaxe

property(fget=None, fset=None, fdel=None, doc=None)

Description du paramètre

  • Paramètre fget(Facultatif) :
    • Type : Fonction
    • Description : la fonction appelée lors de la lecture de la valeur de la propriété.
  • Paramètre fset(Facultatif) :
    • Type : Fonction
    • Description : la fonction appelée lors de la définition de la valeur de la propriété.
  • Paramètre fdel(Facultatif) :
    • Type : Fonction
    • Description : la fonction appelée lors de la suppression de la propriété.
  • Paramètre doc(Facultatif) :
    • Type : String
    • Description : la docstring de la propriété.

Description de la fonction

  • Valeur de retour: renvoie un objet property.
  • Fonctionnalités: fait en sorte que l'accès à une propriété ressemble à celui d'une variable normale, mais exécute en réalité une fonction.

Exemples

Exemple 1 : Utilisation de base

Exemple

class Circle:
    def __init__(self, radius):
        self.radius = radius

    # Utilisation de property pour créer des propriétés calculées
    def get_area(self):
        """Calcule l'aire d'un cercle."""
        return 3.14159 * self.radius ** 2

    def set_radius(self, value):
        """Définit le rayon (une validation peut être ajoutée)."""
        if value < 0:
            raise ValueError(Le rayon ne peut pas être négatif)
        self.radius = value

    # Créer une propriété
    area = property(get_area, set_radius)

# Utilisation
c = Circle(5)
print(fRayon : {c.radius})  # Sortie : Rayon : 5
print(fAire : {c.area})     # Sortie : Aire : 78.53975

# Définir une propriété
c.radius = 10
print(fNouvelle aire : {c.area})   # Sortie : Nouvelle aire : 314.159

# Vérifier
c.radius = -5  # Lèvera une exception

Sortie attendue :

半径: 5
面积: 78.53975
新面积: 314.159

Explication du code :

  1. Avec property, vous pouvez définir des propriétés calculées.
  2. Le setter peut ajouter une logique de validation des données.

Exemple 2 : Utilisation du décorateur @property (recommandé)

Exemple

class Student:
    def __init__(self, name, score):
        self.name = name
        self._score = score

    @property
    def score(self):
        """Obtenir le score"""
        return self._score

    @score.setter
    def score(self, value):
        """Définir le score (avec validation)"""
        if not 0 <= value <= 100:
            raise ValueError(Le score doit être compris entre 0 et 100)
        self._score = value

    @property
    def grade(self):
        """Calculer la note en fonction du score"""
        if self._score >= 90:
            return 'A'
        elif self._score >= 80:
            return 'B'
        elif self._score >= 70:
            return 'C'
        elif self._score >= 60:
            return 'D'
        else:
            return 'F'

# Utilisation
s = Student("Tom", 85)
print(s.name)    # Sortie: Tom
print(s.score)    # Sortie : 85
print(s.grade)    # Sortie : B

s.score = 92     # Définir le score
print(s.grade)    # Sortie : A

s.score = 105    # Va lever une exception

Sortie attendue :

Tom
85
B
A

Explication du code :

  • Le décorateur @property est une façon plus pythonique de l'écrire.
  • Vous pouvez définir getter, setter et deleter.

Exemple 3 : Propriété en lecture seule

Exemple

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        """Propriété en lecture seule"""
        return self._name

    # Sans setter, la propriété ne peut pas être modifiée

p = Person("Tom")
print(p.name)  # Sortie: Tom

# Tenter de la modifier lèvera une erreur (pas de setter)
# p.name = "Jack" # lèvera AttributeError

# Sa suppression lèvera également une erreur
# del p.name # lèvera AttributeError

Sortie attendue :

Tom

En définissant uniquement un getter et aucun setter, vous pouvez créer une propriété en lecture seule.


Python3 内置函数Fonctions intégrées de Python3


Autres extensions