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

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


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.


Cool link: Python is not Java :)

In Java, you have to use getters and setters because using public fields gives you no opportunity to go back and change your mind later to using getters and setters. So in Java, you might as well get the chore out of the way up front. In Python, this is silly, because you can start with a normal attribute and change your mind at any time, without affecting any clients of the class. So, don't write getters and setters.


Here is what Guido van Rossum says about that in Masterminds of Programming

What do you mean by "fighting the language"?

Guido: That usually means that they'retrying to continue their habits thatworked well with a different language.

[...] People will turn everything intoa class, and turn every access into anaccessor method,
where that is really not a wise thing to do in Python;you'll have more verbose code that is
harder to debug and runs a lot slower.You know the expression "You can writeFORTRAN in any language?" You can write Java in any language, too.