Je ne sais pas quand un attribut doit être privé et si je dois utiliser l'option property
.
J'ai lu récemment que les setters et les getters ne sont pas pythoniques mais que l'utilisation de l'option property
Le décorateur est OK.
Mais que se passe-t-il si j'ai un attribut qui ne doit pas être défini depuis l'extérieur de la classe mais qui peut être lu (attribut read-only). Cet attribut doit-il être privé, et par privé je veux dire avec un trait de soulignement, comme ceci self._x
? Si oui, alors comment puis-je le lire sans utiliser le getter ? La seule méthode que je connais pour l'instant est d'écrire
@property
def x(self):
return self._x
De cette façon, je peux lire les attributs par obj.x
mais je ne peux pas le régler obj.x = 1
donc c'est bon.
Mais dois-je vraiment me préoccuper de définir un objet qui ne doit pas être défini ? Peut-être que je devrais simplement le laisser. Mais encore une fois, je ne peux pas utiliser l'underscore parce que lire obj._x
est bizarre pour l'utilisateur, je devrais donc utiliser obj.x
et là encore, l'utilisateur ne sait pas qu'il ne doit pas définir cet attribut.
Quelle est votre opinion et vos pratiques ?