2017-01-26 9 views
2

Я использую python 2.7.Как использовать Getter без сеттера

У меня есть следующий класс:

class Test: 

    def __init__(self): 
     self._pos_a = ['test_1'] 
     self._pos_b = ['test_2'] 


    @property 
    def pos_a(self): 
     return self._pos_a 

    @property 
    def pos_b(self): 
     return self._pos_b 


    if __name__ == "__main__": 
     x = Test() 
     x.pos_a = True 
     print x.pos_a 

>>> True 

Я понимаю, что с помощью свойства декоратора, я по существу создание способа получения для каждого из моих двух классов atributes. Так как я не создаю метод setter, я бы ожидал, что мое назначение «True» на x.pos_a вызовет ошибку. Ошибка должна заключаться в том, что я не могу установить значение атрибута, для которого существует метод getter, но не метод setter. Вместо этого значение установлено на «True», и оно печатает без проблем. Как реализовать это, чтобы достичь этого результата? Я хочу, чтобы пользователи могли «получить» эти значения, но они не должны их устанавливать.

ответ

3

Чтобы свойства работали должным образом, вам необходимо наследовать от object.

class Test(object): 
    ... 

Это потому, что свойства реализуются с помощью дескрипторов и только new-style classes поддержки дескрипторов.