151 votes

Exemple concret sur l'utilisation de la propriété property en python?

Je suis intéressé par la façon d'utiliser @propriétés en Python. J'ai lu le python docs et l'exemple, il y a, à mon avis, c'est juste un jouet de code:

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

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

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x

Je ne sais pas quel est l'avantage(s) je peux obtenir à partir d'emballer la _x rempli avec la propriété décorateur. Pourquoi ne pas simplement mettre en œuvre:

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

Je pense que, la propriété fonctionnalité peut être utile dans certaines situations. Mais quand? Quelqu'un pourrait-il me donner quelques exemples du monde réel?

Merci.

95voto

benosteen Points 794

Autres exemples serait validation/filtrage des attributs set (qui oblige à être dans les limites ou acceptable) et modalités d’évaluation paresseuse de complexe ou se transformant rapidement.

Calcul complexe caché derrière un attribut :

Validation :

84voto

mouad Points 21520

Un cas d’utilisation simple sera de mettre une lecture seule instance attribut, comme vous le savez en tête un nom de variable avec un trait de soulignement en python habituellement moyenne il est *privé* (usage interne), mais parfois, nous voulons être en mesure de lire l’attribut d’instance et ne pas de l’écrire s o, nous pouvons utiliser pour cela :

22voto

Eli Bendersky Points 82298

Jetez un oeil à cet article pour une utilisation très pratique. En résumé, elle explique comment en Python vous pouvez fossé généralement méthode explicite getter/setter, puisque si vous venez à besoin d’eux à un certain stade, vous pouvez utiliser `` pour une exécution sans faille.

16voto

detly Points 11267

Une chose que j'ai utilisé pour la mise en cache est lente, mais immuable, les valeurs stockées dans une base de données. Cette généralise à toute situation où vos attributs besoin de calcul ou de quelque autre opération longue (par exemple. base de données à vérifier, réseau de communication) que vous ne voulez le faire à la demande.

class Model(object):

  def get_a(self):
    if not hasattr(self, "_a"):
      self._a = self.db.lookup("a")
    return self._a

  a = property(get_a)

C'était dans une application web où tout affichage de la page peut seulement besoin d'un attribut particulier de ce genre, mais les objets sous-jacents eux-mêmes peuvent avoir plusieurs de ces attributs - initialisation de tous sur la construction serait du gaspillage, et les propriétés de me permettre d'être flexible dans lequel les attributs sont paresseux et qui ne le sont pas.

8voto

Stanislav Ageev Points 540

Propriété est simplement une abstraction autour d’un champ qui vous donnent plus de contrôle sur les moyens qu’un champ spécifique peut être manipulé et faire des calculs de middleware. Peu d'entre les usages qui viennent à l’esprit est la validation et restriction préalable de l’initialisation et l’accès

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X