Python „prywatny” mangling nazwy i atrybuty instancji względem klasy
Piszę dekorator, który potrzebuje dostępu do zmiennych prywatnych i znalazł tę rozbieżność. Czy ktoś może to wyjaśnić?
(Python 2.5)
Rozmieszczanie nazw działa zgodnie z oczekiwaniami dla atrybutów zdefiniowanych w klasie:
>>> class Tester(object):
... __foo = "hi"
>>> t = Tester()
>>> t._Tester__foo
'hi'
Atrybuty instancji nie działają (i tak właśnie powinniśmy to zrobić prawidłowo?)
>>> class Tester(object):
... def __init__(self):
... self.__foo = "hi"
>>> t = Tester()
>>> t._Tester__foo
AttributeError: 'Tester' object has no attribute '_Tester__foo'
P.S. Czy „atrybut klasy” jest odpowiednim słowem? Nie są statyczne, ale jeśli utworzysz jedną z tych list lub inny zmienny typ, zostanie on udostępniony ...
Aktualizacja
W rzeczywistości drugi przykład działa dobrze. To był problem ze sprzętem (ponowne uruchomienie pomogło).