Stavo scrivendo un decoratore che ha bisogno di accedere a variabili private e trovato questa discrepanza. Qualcuno può spiegarlo?Python "privato" nome mangling e istanza contro attributi della classe
(Python 2.5)
Naming pressare opere come previsto per gli attributi definiti nella classe:
attributi di istanza non funzionano (e questo è il modo in cui siamo tenuti a farlo bene?)
>>> class Tester(object):
... def __init__(self):
... self.__foo = "hi"
>>> t = Tester()
>>> t._Tester__foo
AttributeError: 'Tester' object has no attribute '_Tester__foo'
PS "Attributo di classe" è la parola giusta per questi? Essi non sono statici, ma se fate uno di quelli un elenco, o qualche altro tipo mutabile, si è condiviso ...
Aggiornamento
Infatti, secondo esempio funziona bene, anche. Era un problema hardware (riavvio aiutato).
L'attributo di classe è la parola giusta. E sono * sempre * condivisi. La mutabilità non ha importanza. Praticamente non importa mai, tranne quando ti chiedi se riesci a mutare un dato oggetto. – delnan
Posso nuke questa domanda? O qualcuno vede valore nel mantenerlo? Non riesco a riprodurre il mio problema originale. Sembra funzionare come previsto. – Rafe
Lasciamo perdere, dato che @MartijnPieters ha fatto tutto il possibile per testare il problema in molti test di Python. – jsbueno