In Python properties are used instead of the Java-style getters, setters. So one rarely sees get... or set.. methods in the public interfaces of classes.
But in cases were a property is not appropriate one might still end up with methods that behave like getters or setters. Now my questions: Should these method names start with get_
/ set_
? Or is this unpythonic vebosity since it is often obvious what is meant (and one can still use the docstring to clarify non-obvious situations)?
This might be a matter of personal taste, but I would be interested in what the majority thinks about this? What would you prefer as an API user?
Example: Say we have an object representing multiple cities. One might have a method get_city_by_postalcode(postalcode)
or one could use the shorter name city_by_postalcode
. I tend towards the later.
I think shorter is better, so I tend to prefer the later. But what's important is to consistent with your project: don't mix the two methods. If you jump into someone else's project, keep what the other developers chose initially.
You won't ever loose the chance to make your property behave like a getter/setter later by using descriptors. If you want to change a property to be read only you can also replace it with a getter method with the same name as the property and decorate it with @property. So my advice is to avoid getters/setters unless the project you are working on already uses them, because you can always change your mind later and make properties read-only, write-only or whatever without modifying the interface to your class.
If it's usable as a property (one value to get or set, and no other parameters, I usually do:
class Foo(object):
def _get_x(self):
pass
def _set_x(self, value):
pass
x = property(_get_x, _set_x)
If the getter/setter is any more complex than that, I would use get_x and set_x:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With