Maison > développement back-end > Tutoriel Python > Comment fonctionne le décorateur `@property` de Python par rapport à la fonction `property()` ?

Comment fonctionne le décorateur `@property` de Python par rapport à la fonction `property()` ?

Linda Hamilton
Libérer: 2025-01-05 09:41:40
original
731 Les gens l'ont consulté

How Does Python's `@property` Decorator Work Compared to the `property()` Function?

Comprendre le décorateur @property en Python

En Python, le décorateur @property est un outil puissant pour définir des propriétés, offrant un accès pratique aux attributs des objets. Cependant, le fonctionnement du décorateur peut parfois prêter à confusion, en particulier lorsqu'il est utilisé en conjonction avec la fonction intégrée property.

La fonction property() renvoie un objet descripteur spécial. Cet objet fait office d'intermédiaire entre l'instance de la classe et l'attribut accédé. Lorsqu'un objet descripteur est accédé, sa méthode __get__ correspondante est appelée.

Dans le cas du décorateur @property, la méthode __get__ de l'objet descripteur est définie sur la fonction annotée avec le décorateur. Par exemple, dans le code suivant :

class C:
    def __init__(self):
        self._x = None

    @property
    def x(self):
        return self._x
Copier après la connexion

Le décorateur @property crée un objet descripteur et attribue la fonction x à sa méthode __get__. Lorsque la propriété x est accédée à partir d'une instance de C, la méthode __get__ est appelée, en passant l'instance et la classe comme arguments.

c = C()
c.x  # calls c.__get__(instance=c, type=C)
Copier après la connexion

En revanche, la fonction property(), lorsqu'elle est utilisée directement, prend arguments pour une fonction getter, setter et deleter. Ces arguments sont utilisés pour configurer la fonctionnalité de l'objet descripteur. Cependant, lorsqu'il est utilisé comme décorateur, le décorateur @property ne spécifie pas explicitement ces arguments car il crée un objet descripteur avec le comportement défini dans la fonction décorée.

Le code suivant montre comment utiliser la propriété() et le décorateur @property pour créer des propriétés similaires :

class C:
    def __init__(self):
        self._x = None

    # Using property() function
    x = property(lambda self: self._x, lambda self, value: self._x)

    # Using @property decorator
    @property
    def x(self):
        return self._x
Copier après la connexion

Dans les deux cas, accéder à la propriété x renverra l'attribut privé _x.

En résumé, le décorateur @property est un raccourci pratique pour créer des objets descripteurs qui permettent un accès facile aux attributs d'instance. Il crée automatiquement un objet descripteur avec une fonction getter définie sur la fonction décorée, ce qui en fait un outil puissant pour gérer les attributs de classe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal