35 votes

Manière préférée de définir des propriétés en Python: décorateur de propriété ou lambda?

Quelle est la manière préférée de définir les propriétés de classe en Python et pourquoi? Est-ce correct d'utiliser les deux dans une classe?

 @property
def total(self):
    return self.field_1 + self.field_2
 

ou

 total = property(lambda self: self.field_1 + self.field_2)
 

51voto

Toni Ruža Points 5538

Pour les propriétés en lecture seule, j'utilise le décorateur, sinon je fais habituellement quelque chose comme ceci:

 class Bla(object):
    def sneaky():
        def fget(self):
            return self._sneaky
        def fset(self, value):
            self._sneaky = value
        return locals()
    sneaky = property(**sneaky())
 

mise à jour:

Les versions récentes de python ont amélioré l'approche des décorateurs:

 class Bla(object):
    @property
    def elegant(self):
        return self._elegant

    @elegant.setter
    def elegant(self, value):
        self._elegant = value
 

22voto

Benno Points 3677

La forme de décorateur est probablement préférable dans le cas que vous avez montré, lorsque vous souhaitez transformer la méthode en propriété en lecture seule. Le second cas est préférable lorsque vous souhaitez fournir un setter / deleter / docstring ainsi que le getter ou si vous souhaitez ajouter une propriété dont le nom est différent de la méthode dont elle tire sa valeur.

5voto

N'utilisez pas de lambdas pour cela. Le premier est acceptable pour une propriété en lecture seule, le second est utilisé avec des méthodes réelles pour des cas plus complexes.

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