Was ist der historische Grund, warum Python den doppelten Unterstrich für Class Private-Mitglieder verwendet?

8

In Python wird eine modulprivate Funktion oder Variable benannt _foo. Wenn es für eine Klasse privat ist, sind es Namen __foo. Die Mechanik, die dahinter steckt, wie diese funktionieren, ist jedoch für die Frage von geringer Relevanz.

Warum wurden beim Entwurf der Python-Sprache die doppelten Unterstriche für private Klassenmitglieder ausgewählt? Warum nicht einen einzelnen Unterstrich, wie beim Modul privat? Warum nicht ein anderes Zeichen, das sichtbarer ist? (Die Unterscheidung zwischen _ und __ ist schwierig).

Ich bin mir sicher, dass es hier eine Geschichte gibt, aber ich habe Probleme, sie zu finden, weil ich nur Tutorials finde, die mir sagen, was es bedeutet und nicht, warum es so ist.

Lyndon White
quelle
Ich bin nicht daran interessiert zu diskutieren, ob es eine gute Wahl war oder nicht, nur um die Geschichte zu kennen.
Lyndon White
1
Einzelne Unterstriche sind nicht speziell für modulprivate Inhalte gedacht, sondern werden auch für private Mitglieder einer Klasse verwendet. Der Unterschied zwischen einfachen und doppelten Unterstrichen besteht nur in der Namensverfälschung, die in Klassen oft unnötig oder sogar schädlich ist.
"In Python heißt eine private Modulfunktion oder -variable _foo ..." Dies ist falsch: siehe hier python.org/dev/peps/pep-0008/#descriptive-naming-styles . Kurz gesagt, Unterstriche sind eine Kratzkonvention, sie machen nichts privat (die Methoden sind immer noch von außen zugänglich).
Gented

Antworten:

16

Python Enhancement Proposal (PEP) 8 erläutert unter anderem die beabsichtigte Bedeutung von Namen mit einfachem und doppeltem Unterstrich. Wie viele der frühen PEPs repräsentiert es Guido van Rossums Vorlieben, und als Pythons anerkannter wohlwollender Diktator für das Leben werden seine Vorlieben im Allgemeinen von der Python-Community befolgt.

Die Verwendung von doppelten Unterstrichen „Magie“ Worte zumindest so weit zurück wie das C - Präprozessor geht , um anzuzeigen, mit dem dieses Übereinkommen in den 1970er Jahren beginnt ( zB , __FILE__, __LINE__). Dies geschah, weil es keine Symbole gab, die für den Präprozessor nicht zulässig waren. Ein selten verwendetes Namensmuster (mehrere Unterstriche und Großbuchstaben) sorgte praktisch für einen Mangel an Konflikten.

Ross Patterson
quelle