@Sve@r,
Je tenais à accompagner ta réponse avec plus de précisions, même si on sort un peu de la problématique du PO (désolé pour le PO).
Il est important de ne pas confondre les différentes philosophies de chaque langage... quelques écrits le montre (certains plus anciens que d'autres).
Python is not Java
et d'autres si on recherche sur le net... En général je ne connais pas trop ceux qui écrivent, et on n'est pas obligé de faire confiance si ces personnes n'ont pas prouvés leur compétence dans le domaine lié au langage python, mais on peut trouver une logique au moins à comprendre que Java ne travaille pas avec des attributs publics (encapsulation). Si le codeur Java souhaite implémenter des getters/setters, il va devoir casser tout son code, car il passe ses attributs de manière privée. Alors c'est une norme logique en Java et si je ne me trompe pas en C++ aussi.
Là-dessus, la philosophie Python est différente, avec d'abord la syntaxe. Prenons l'exemple des setters en Java
bien plus complexe qu'en Python
À choisir niveau syntaxe, on fait vite le choix...
Bref tout ça nous amène à une citation du zen de python:
- If the implementation is easy to explain, it may be a good idea.
Philosophiquement parlant, Python à une autre pensée, il considère que l'accès direct aux attributs de classe n'est pas mauvais, au contraire. C'est surtout vrai quand on ne crée pas de code utilisé par d'autres.
Conceptuellement l'accès direct à une variable de classe correspondrait à une autre citation du zen qui est readability counts et du coup ce n'est pas seulement plus claire mais aussi plus simple Simple is better than complex. C'est cette philosophie que l'on garde généralement. Mais rien n'empêche par la suite d'utiliser les property quand on a besoin de rendre dynamique les changements de valeur de nos variables.
Pour aller plus loin, la variable private de java n'est pas la variable private de python, d'ailleurs, en faisant mumuse avec __dict__, cet accès est possible, ce qui est assez gênant sur la partie conceptuelle. En règle générale il serait difficile par cette méthode de se protéger d'un code malveillant venant d'un client.
Cette philosophie est contraire à beaucoup de langages (Perl, Java, C++, ...), mais c'est ce qui rend ce langage populaire, par sa simplicité et sa lisibilité. Certains utilisateurs Java considèrent certains des principes python comme une faiblesse, ce que considère les utilisateurs python comme une liberté.
Conclusion:Elle ne concerne que moi (et beaucoup de pro python), je préfère accéder directement aux variables de classe, et si besoin ajouter une property, qu'utiliser les getters/setters. Là plupart des modules standards suivent cette façon de faire... Les getters/setters ralentissent le code.
Le concepteur du code s'il souhaite "mutiler" ses attributs de classe, doit faire en sorte que le client ne soit pas obligé de recourrir à la manipulation de ces mêmes attributs, l'encapsulation reste en générale une mauvaise idée, d'ailleurs il ne l'a supporte pas vraiment, c'est un genre de pseudo-encapsulation.
Pour finir, la décision en revient au codeur, mais il faut bien prendre en compte la nature du langage que l'on utilise.
Partager