Brandon Rozek

Photo of Brandon Rozek

PhD Student @ RPI studying Automated Reasoning in AI and Linux Enthusiast.

Quick Python: Getters and Setters

Published on

Updated on

2 minute reading time

One of the hidden gems in Python classes are seamless getters and setters. I discovered this through the book Effective Python by Brett Slatkin. Though the example I’ll use is different and shorter than the one he uses in his book.

Let’s create a class representing a person. The only information we’re going to store is their age and we’ll make it optional to provide it.

class Person:
    def __init__(self, age=None):
        self._age = None
    def age(self):
        if self._age is None:
            raise ValueError("age must be set before accessing it.")
        return self._age
    def age(self, age):
        if age < 0:
            raise ValueError("age must be at least zero.")
        self._age = age

The second function in the class decorated by @property will be the getter function for the attribute _age. The name of the function will be what we expect the user to access it as. The setter is then decorated with age.setter where age is the name of the attribute. As such the name chosen in the getter function name, setter function name, and decorator must all match.

Now let’s try using it

bobby = Person()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/user/test.py", line 7, in age
    raise ValueError("age must first be set before accessing it")
ValueError: age must first be set before accessing it
bobby.age = 5
Was this useful? Feel free to share: Hacker News Reddit Twitter
Reply via Email

Have you published a response to this? :