Estaba escribiendo un decorador que necesita acceder a variables privadas y encontró esta discrepancia. ¿Alguien puede explicar esto?Nombre "privado" de Python que mapea e instancia contra atributos de clase
(Python 2.5)
nombres mangling funciona como se espera para los atributos definidos en la clase:
atributos de instancia no funcionan (y esta es la forma en que se supone que debemos hacer las cosas bien?)
>>> class Tester(object):
... def __init__(self):
... self.__foo = "hi"
>>> t = Tester()
>>> t._Tester__foo
AttributeError: 'Tester' object has no attribute '_Tester__foo'
PS ¿El "atributo de clase" es la palabra correcta para estos? Ellos no son estáticos, pero si haces una de esas una lista, o algún otro tipo mutable, es compartida ...
actualización
De hecho, el segundo ejemplo funciona bien, también. Fue un problema de hardware (reinicio ayudado).
El atributo de clase es la palabra correcta. Y son * siempre * compartidos. La mutabilidad no importa. Casi nunca importa, excepto cuando se pregunta si puedes mutar un objeto dado. – delnan
¿Puedo enviar esta pregunta? ¿O alguien ve valor para mantenerlo? No puedo reproducir mi problema original. Parece que funciona como se esperaba. – Rafe
Mejor déjalo, ya que @MartijnPieters hizo todo el recorrido para probar el problema en muchas pruebas de Python. – jsbueno