Do you use the get/set pattern (in Python)?

Avery Payne picture Avery Payne · Apr 5, 2010 · Viewed 90.8k times · Source

Using get/set seems to be a common practice in Java (for various reasons), but I hardly see Python code that uses this.

Why do you use or avoid get/set methods in Python?

Answer

blokeley picture blokeley · Apr 5, 2010

In python, you can just access the attribute directly because it is public:

class MyClass:

    def __init__(self):
        self.my_attribute = 0  

my_object = MyClass()
my_object.my_attribute = 1 # etc.

If you want to do something on access or mutation of the attribute, you can use properties:

class MyClass:

    def __init__(self):
        self._my_attribute = 0

    @property
    def my_attribute(self):
        # Do something if you want
        return self._my_attribute

    @my_attribute.setter
    def my_attribute(self, value):
        # Do something if you want
        self._my_attribute = value

Crucially, the client code remains the same.