Maison >développement back-end >Tutoriel Python >Comment fonctionne le décorateur @property de Python, y compris ses méthodes Getter, Setter et Deleter ?

Comment fonctionne le décorateur @property de Python, y compris ses méthodes Getter, Setter et Deleter ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-17 20:51:11468parcourir

How Does Python's @property Decorator Work, Including Its Getter, Setter, and Deleter Methods?

Comment fonctionne le décorateur @property en Python ?

Le décorateur @property est un outil puissant en Python qui nous permet de définir des propriétés pour nos cours. Mais son utilisation en tant que décorateur, bien qu'elle prenne des arguments lorsqu'elle est utilisée comme fonction, peut prêter à confusion.

Objets de propriété

La clé pour comprendre le comportement du décorateur réside dans le fonction property(). Cette fonction renvoie un objet descripteur spécial, qui possède des méthodes supplémentaires : getter, setter et deleter.

Création de propriétés avec des décorateurs

La syntaxe @property est un sucre syntaxique pour définir manuellement un objet de propriété. Le code ci-dessous est équivalent à l'utilisation du décorateur @property :

def foo(self): return self._foo
foo = property(foo)

Lorsque nous attribuons une fonction à une propriété, nous remplaçons la fonction par un objet de propriété.

Decorating Setter et méthodes Deleter

Les décorateurs @property.setter() et @property.deleter(), malgré l'utilisation du Syntaxe x.setter et x.deleter, ne créez pas de nouveaux objets. Au lieu de cela, ils invoquent les méthodes getter, setter et deleter de l'objet de propriété :

x.setter = property().setter(another_setter_function)  # Replace setter
x.deleter = property().deleter(another_deleter_function)  # Replace deleter

Ces méthodes renvoient de nouveaux objets de propriété avec les méthodes setter ou deleter mises à jour.

Utilisation Méthodes de descripteur

Les objets de propriété agissent comme des objets descripteurs avec __get__(), __set__() et Méthodes __delete__(). Ces méthodes gèrent l'accès aux attributs d'instance :

prop.__get__(instance, owner_class): # Access the property
prop.__set__(instance, value): # Set the property
prop.__delete__(instance): # Delete the property

Exemple

Construisons une propriété à l'aide des méthodes de décorateur et de descripteur :

class PropertyDemonstrator:
    def __init__(self):
        self._private_data = 5

    def get_private(self): return self._private_data

    def set_private(self, value): self._private_data = value

    def delete_private(self): del self._private_data

    # Create a property using decorator methods
    private = property(get_private, set_private, delete_private, "My Private Data")

    # Create a property using descriptor methods
    another_private = Property(get_private, set_private, delete_private, "My Another Private Data")

Dans cet exemple, les méthodes de descripteurs de l'objet de propriété géreraient la manipulation réelle de l'attribut _private_data, fournissant ainsi un moyen cohérent et flexible d'accéder, modifiez-le ou supprimez-le.

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!

Déclaration:
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