Du kannst jedenfalls nicht einfach über den Namen darauf zugreifen wie in A.XtraNine hat geschrieben:Das heißt wenn ich in Klasse A ein Attribut habe das zwei unterstriche am Anfang hat und dann die Klasse A in Klasse B vererbe, kann ich dann von Klasse B nicht auf das Attribut mit den 2 unterstrichen zugreifen weil es Protected ist (um mal die Analogie von C++ zu benutzen)?
Sozusagen. Da fehlt noch ein Unterstrich zwischen Klassennamen und `PrivatesAtribut` aber das ist es was der Interpretierer für Dich macht, wenn Du zwei Unterstriche benutzt. Das schöne an Python ist ja das man alles "live" ausprobieren kann:Das verstehe ich nicht so ganz wie du das meinst. Meinst du folgendes?Es wird ein Unterstrich und der Klassenname vor den Namen gesetzt.Code: Alles auswählen
class KlasseA: def __init__ (self): _KlasseA_PrivatesAtribut = "test"
Code: Alles auswählen
In [5]: class A:
...: def __init__(self):
...: self.__test = 42
...: def __str__(self):
...: return str(self.__test)
...:
In [6]: a = A()
In [7]: print a
42
In [8]: a.__test
---------------------------------------------------------------------------
exceptions.AttributeError Traceback (most recent call last)
/home/marc/<ipython console>
AttributeError: A instance has no attribute '__test'
In [9]: dir(a)
Out[9]: ['_A__test', '__doc__', '__init__', '__module__', '__str__']
In [10]: a._A__test
Out[10]: 42
In [11]: getattr(a, '_%s__%s' % (a.__class__.__name__, 'test'))
Out[11]: 42