Voici quelques corrections à vos déclarations qui clarifieront, espérons-ce que vous demandez au sujet:
méthodes et attributs magiques sont préfixés et suffixé par un double trait de soulignement. Un double trait de soulignement seulement dans le préfixe est spécifiquement pour rendre les choses privées.
Dans Python 3 et versions ultérieures, les attributs précédés uniquement d'un double trait de soulignement sont tronqués de leur nom pour les rendre plus confidentiels. Vous ne pourrez pas y accéder en dehors d'un cours en utilisant le nom littéral. Cela peut entraîner des problèmes en dehors des classes, n'utilisez donc pas de préfixe de double soulignement pour les attributs de niveau module: How to access private variable of Python module from class. Cependant, utilisez-les dans les classes pour rendre les choses privées. Si la fonctionnalité n'était pas destinée à être utilisée, elle n'aurait pas été ajoutée à Python.
En ce qui concerne la confidentialité et la protection en général, il n'existe pas de concept de ce type en Python. C'est juste une attente que les programmeurs orientés objet viennent d'autres langues, donc il y a une convention établie pour marquer les attributs comme privés. Le préfixe unique de soulignement est généralement le moyen préféré pour marquer les choses comme privé, car il ne réduit pas le nom, laissant la vie privée à la discrétion de l'utilisateur de l'API. Ce type de confidentialité/protection est en réalité davantage un moyen d'indiquer que l'attribut est un détail d'implémentation susceptible de changer dans les futures versions. Il n'y a rien qui vous empêche d'utiliser l'attribut, surtout si vous êtes OK lorsque votre code est rompu lorsqu'il est lié à différentes versions de bibliothèques. Gardez à l'esprit que même les noms mutilés suivent un modèle fixe pour une version donnée de Python. Le mangling vise plus à vous empêcher de surcharger accidentellement quelque chose que vous n'aviez pas l'intention de faire que de rendre les attributs vraiment privés. Il ajoute simplement le nom de classe avec un tas de traits de soulignement à votre nom d'attribut, de sorte que vous pouvez toujours y accéder directement si vous savez comment.
Voici une bonne description de tout à peu près, je viens d'écrire des docs: https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references
Cela dépend entièrement de savoir si vous parlez grands doubles underscores (par exemple '__foo') ou avant et arrière (par exemple' __foo__'). – miradulo
@Mitch Diriger simplement le double trait de soulignement, Pas de début et de fin – teddybear123
Dans ce cas, l'affirmation que cela va entrer en conflit avec les méthodes magiques est fausse. Les méthodes magiques utilisent des traits de soulignement avant et arrière et ne peuvent donc pas entrer en conflit. Cependant, voici une raison différente de ne pas les utiliser http: // stackoverflow.com/questions/6930144/souligner-vs-double-souligner-avec-variables-et-méthodes –