Maison >développement back-end >Tutoriel Python >Comment puis-je implémenter pythoniquement des getters et des setters à l'aide du décorateur `property()` ?

Comment puis-je implémenter pythoniquement des getters et des setters à l'aide du décorateur `property()` ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-24 02:00:14697parcourir

How Can I Pythonically Implement Getters and Setters Using the `property()` Decorator?

Approche pythonique des getters et setters

En Python, il existe différentes manières d'implémenter des getters et des setters pour les attributs d'objet. Parmi les approches mentionnées, une solution Pythonic consiste à exploiter le décorateur property() intégré de Python.

Le décorateur property() vous permet de créer une méthode de propriété qui agit comme un attribut mais peut avoir un comportement supplémentaire, tel que la validation des entrées ou la mise en cache. Voici un exemple :

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

    @property
    def x(self):
        """I'm the 'x' property."""
        print("getter of x called")
        return self._x

    @x.setter
    def x(self, value):
        print("setter of x called")
        self._x = value

    @x.deleter
    def x(self):
        print("deleter of x called")
        del self._x

Dans cet exemple :

  • La méthode __init__() initialise l'attribut _x comme None.
  • La propriété x définit le getter méthode, qui affiche "getter de x appelé" avant de renvoyer la valeur de _x.
  • La partie x.setter définit la méthode setter, qui imprime "setter de x appelé" avant de définir la valeur de _x.
  • La partie x.deleter définit la méthode deleter, qui imprime "supprimeur de x appelé" avant de supprimer l'attribut _x.

Pour utiliser la propriété x, accédez-y simplement comme un attribut normal :

c = C()
c.x = 'foo'  # setter called
foo = c.x    # getter called
del c.x      # deleter called

Cette approche fournit un moyen propre et extensible d'implémenter des getters et des setters tout en adhérant aux conventions Pythonic.

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