Python «личное» искажение имени и экземпляр против атрибутов класса
Я писал декоратор, которому нужен доступ к закрытым переменным, и обнаружил это несоответствие. Кто-нибудь может объяснить это?
(Python 2.5)
Использование именования работает, как ожидается, для атрибутов, определенных в классе:
>>> class Tester(object):
... __foo = "hi"
>>> t = Tester()
>>> t._Tester__foo
'hi'
Атрибуты экземпляра не работают (и это то, как мы должны делать это правильно?)
>>> class Tester(object):
... def __init__(self):
... self.__foo = "hi"
>>> t = Tester()
>>> t._Tester__foo
AttributeError: 'Tester' object has no attribute '_Tester__foo'
Постскриптум Является "атрибут класса " правильное слово для этого? Они неt статический, но если вы сделаете один из них списком или каким-либо другим изменяемым типом, он станет общим ...
Обновить
На самом деле, второй пример тоже работает нормально. Это была аппаратная проблема (перезагрузка помогла).