Python - почему свойство только для чтения доступно для записи?
Я пытаюсь определить класс со свойством только для чтения в Python; Я следовал документации по Python и придумал следующий код:
#!/usr/bin/python
class Test:
def __init__(self, init_str):
self._prop = init_str
@property
def prop(self):
return self._prop
t = Test("Init")
print t.prop
t.prop = "Re-Init"
print t.prop
Теперь, когда я пытаюсь выполнить код, хотя я ожидаю ошибки / исключения, я вижу, что он выполняется нормально:
$ ./python_prop_test
Init
Re-Init
Моя версия Python 2.7.2. Что я вижу, это ожидается? Как убедиться, что свойство не устанавливается?
2 ответа
Чтобы это работало так, как вы ожидаете, Test
должен быть класс нового стиля:
class Test(object):
^^^^^^^^
На это намекает документация дляproperty()
:
Возврат атрибута свойства для классов нового стиля (классов, производных от
object
).
Когда я перехожу Test
в новый класс и попытаться изменить prop
Я получаю исключение:
In [28]: t.prop='Re-Init'
AttributeError: can't set attribute
Чтобы использовать свойства, вы должны использовать классы нового стиля. Чтобы использовать классы нового стиля в Python 2, вы должны наследовать от object
, Измените класс по умолчанию на class Test(object)
,