Malonge
Malonge

Reputation: 2040

How to Use Getter Without Setter

I am using python 2.7.

I have the following class:

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

My understanding is that by using the property decorator, I am essentially establishing a getter method for each of my two class atributes. Since I am not creating a setter method though, I would expect that my assignment of "True" to x.pos_a would raise an error. The error should be that I can't set the value of an attribute for which there is a getter method but no setter method. Instead, the value is set to "True" and it prints with no problem. How do I implement this so as to achieve that result? I want users to be able to "get" these values, but they should not be able to set them.

Upvotes: 4

Views: 4572

Answers (1)

wim
wim

Reputation: 363566

You'll need to inherit from object for properties to work properly.

class Test(object):
    ...

That's because properties are implemented with descriptors and only new-style classes support descriptors.

Upvotes: 7

Related Questions