Si «explicite vaut mieux qu'implicite», pourquoi n'y a-t-il pas de modificateurs d'accès explicites en Python: public, protégé, privé, etc.?
Je sais que l'idée est que le programmeur devrait savoir quoi faire à travers un indice - pas besoin d'utiliser la «force brute». Mais `` l'encapsulation '' ou la `` dissimulation d'informations '' de l'OMI n'est pas seulement pour garder les gens à l'écart, c'est une question d'organisation et de structure: vos couches de développement doivent avoir des étendues et des frontières auto-définies et clairement délimitées, tout comme les systèmes physiques.
Quelqu'un peut-il m'aider s'il vous plaît ici avec une explication solide pour expliquer pourquoi les restrictions d'accès sont implicites plutôt qu'explicites en Python, un langage qui semble autrement proche de la perfection?
Edit: Jusqu'à présent, j'ai vu 3 réponses proposées, et j'ai réalisé qu'il y a 2 parties à ma question:
Pourquoi n'y a-t-il pas de mots clés, par exemple
private def myFunc(): dostuff....
au lieu de l'OMI, les traits de soulignement laids et difficiles à taper. Mais ce n'est pas le point important.
Plus important:
Pourquoi ces modificateurs d'accès sont-ils uniquement des «recommandations» ou des conseils et ne sont-ils pas appliqués? Ce sera difficile de changer plus tard? Il est très simple de remplacer «protégé» par «public» - et si vous avez une chaîne d'héritage compliquée qui rend la tâche difficile, votre conception est médiocre - votre conception doit être affinée plutôt que de s'appuyer sur une fonction de langage qui facilite l'écriture. code mal structuré.
Lorsque les modificateurs d'accès sont appliqués, votre code est automatiquement compartimenté - vous SAVEZ que certains segments sont hors de portée afin que vous n'ayez pas à les traiter sauf si et quand c'est nécessaire. Et, si votre conception n'est pas bonne et que vous vous trouvez constamment à déplacer des choses dans et hors de différents champs, le langage peut vous aider à nettoyer votre acte.
Autant que j'aime Python, je trouve que ce 2e point est une grave lacune. Et je n'ai pas encore vu de bonne réponse à cela.
private def whatever
, c'est class x: def whatever(self): pass
un raccourci pour class x: pass; x.whatever = lambda self: pass
, donc en gros, vous auriez besoin d'un modificateur privé pour l'affectation