Pisałem dekoratora, który musi uzyskać dostęp do prywatnych zmiennych i stwierdził tę rozbieżność. Czy ktoś może to wyjaśnić?Python "prywatne" mangling nazwy i instancja vs atrybuty klasy
(Python 2.5)
Naming maglowania działa zgodnie z oczekiwaniami dla atrybutów zdefiniowanych w klasie:
atrybuty instancji nie działa (i to jest sposób, w jaki mają robić to dobrze?)
>>> class Tester(object):
... def __init__(self):
... self.__foo = "hi"
>>> t = Tester()
>>> t._Tester__foo
AttributeError: 'Tester' object has no attribute '_Tester__foo'
PS Czy "atrybut klasy" jest właściwym słowem? Oni nie są statyczne, ale jeśli jeden z tych listę lub jakiś inny zmienny typ, jest on dzielony ...
Aktualizacja
W rzeczywistości, drugi przykład działa dobrze, zbyt. To był problem ze sprzętem (ponowne uruchomienie pomogło).
Atrybutem klasy jest właściwe słowo. I są * zawsze * dzielone. Mutability nie ma znaczenia. To prawie nigdy nie ma znaczenia, z wyjątkiem pytania, czy możesz zmutować dany obiekt. – delnan
Czy mogę odrzucić to pytanie? Czy ktoś widzi wartość w utrzymaniu go? Nie mogę odtworzyć mojego pierwotnego problemu. Wydaje się działać zgodnie z oczekiwaniami. – Rafe
Raczej zostaw to, ponieważ @MartijnPieters przeszedł całą procedurę testowania problemu w wielu testach Pythona. – jsbueno