0
votes

Quelle est la différence entre @property et @ x.geter à Python?

J'ai essayé de rechercher cette question dans Python Docs et d'autres blogs, mais je n'ai pas trouvé de réponse satisfaisante. Alors, nous allons. Dans le code suivant: xxx

Je comprends le premier décorateur @property définit la propriété. Est le @ x.geter redondant dans ce cas? Quand sont les deux méthodes nécessaires?


4 commentaires

Ce code n'a pas de sens.


X.Getter ne fonctionne que car vous avez défini x à l'avance. Étant donné que x est une fonction déjà quel est le point de cela?


Ce n'est pas redondant exactement, il ajoute un second getter nommé c . Mais le comportement est le même que si vous veniez d'écrire @property à nouveau.


@ user2357112, pouvez-vous élaborer?


3 Réponses :


-2
votes

de La documentation :

Un objet de propriété contient des méthodes getter, setter et DELERSTER utilisables décorateurs qui créent une copie de la propriété avec le Fonction d'accesseur définie sur la fonction décorée. C'est mieux Expliqué avec un exemple:


0 commentaires

1
votes

est le @ x.geter redondant dans ce cas? Quand sont les deux méthodes nécessaires?

Le getter est totalement redondant et inutile. L'utilisation normale du réaccèsement X consiste à configurer le setter et le Delier, le getter est configuré via @property déjà.


0 commentaires

6
votes

@property crée une propriété avec la fonction décorée comme getter (et avec la docstring de la fonction décorée comme docstring).

@ x.geter , où x est une propriété existante, crée une propriété nouvelle avec l'ancien setter, Deleter et Docstring de l'ancienne propriété, mais avec la fonction décorée comme getter.

getter existe principalement pour la symétrie avec Setter et Deleter , qui crée des copies d'une propriété avec un nouveau setter ou Deleter respectivement. L'étui d'utilisation prévu pour ces méthodes ressemble à xxx

où une propriété est construite avec un getter, un setter et Deleter en utilisant @ bla.setter et @ bla.delterter , et chaque définition de fonction décorée remplace l'ancienne propriété avec une nouvelle propriété plus complète.

Ce que vous faites est extrêmement inhabituel et ne fait pas t vraiment avoir un sens. Vous créez une propriété pour l'attribut x avec un getter, puis vous utilisez @ x.geter pour la remplacer par une propriété différente avec un getter différent et équivalent (mais le La Docstring de Old Getter, qui importerait si les deux fonctions getter n'avaient pas tous les deux Aucun docstrings). Il ne sert à rien de faire ça.


3 commentaires

Je sais que c'est inhabituel. J'ai écrit le code aux fins de cette question. ;-)


Il y avait une erreur dans le code, pouvez-vous vérifier s'il vous plaît?


Réponse modifiée.