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 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!