Reputation: 2040
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
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