Mangling de nombre "privado" de Python y atributos de instancia contra clase
Estaba escribiendo un decorador que necesita acceder a variables privadas y encontré esta discrepancia. ¿Alguien puede explicar esto?
(Python 2.5)
La asignación de nombres funciona de la manera esperada para los atributos definidos en la clase:
>>> class Tester(object):
... __foo = "hi"
>>> t = Tester()
>>> t._Tester__foo
'hi'
Los atributos de instancia no funcionan (y esta es la forma en que se supone que debemos hacerlo, ¿no?)
>>> class Tester(object):
... def __init__(self):
... self.__foo = "hi"
>>> t = Tester()
>>> t._Tester__foo
AttributeError: 'Tester' object has no attribute '_Tester__foo'
PD ¿Es "atributo de clase" la palabra correcta para estos? No son estáticos, pero si haces uno de esos una lista, o algún otro tipo mutable, se comparte ...
Actualizar
De hecho, el segundo ejemplo también funciona bien. Fue un problema de hardware (reinicio ayudado).