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),

Другие вопросы по тегам