@S0S: Es gibt in Python weder ”private” noch ”protected”, das ist verwirrend in dem Zusammenhang diese Begriffe zu verwenden, die eine recht feste Bedeutung haben. Quellen die so etwas behaupten, sollte man mit Vorsicht geniessen. Nur weil etwas im Internet steht, muss es nicht wahr sein.
Nochmal: Doppelte führende Unterstriche machen nichts ”private”. Die Attribute sind weiterhin öffentlich verfügbar, nur unter einem anderen Namen um Namenskollisionen, zum Beispiel bei Mehrfachvererbung zu vermeiden:
Code: Alles auswählen
In [5]: class Neu(object):
...: def __init__(self, attr):
...: self.__attr = attr
...:
In [6]: a = Neu(5)
In [7]: a._Neu__attr
Out[7]: 5
Das Muster nach dem der Name verändert wird ist dokumentiert, es ist also kein Problem darauf zuzugreifen. Es verhindert bei Mehrfachvererbung mit zwei Klassen die den gleichen Attributnamen, aber für unterschiedliche Zwecke verwenden, dass diese Namen kollidieren, weil sie sich durch den jeweiligen Klassennamen unterscheiden, der hinzugefügt wurde. (Allerdings kann einem dann immer noch auf die Füsse fallen wenn es weiter oben in der Vererbungshierarchie eine Weitere Klasse mit dem gleichen Namen und Attribut gibt dem zwei Unterstriche vorangestellt sind.
)
Ein Unterstrich sagt nicht ”normalerweise nicht verändern”, sondern generell nicht zugreifen. Jedenfalls solange man nicht weiss was man tut, oder bereit ist die Risiken zu tragen.