Должен ли я использовать префиксы get /set в именах методов Python?
В Python свойства используются вместо геттеров Java-стиля, сеттеров. Так что редко можно увидеть Гет... или сет.. методы в открытых интерфейсах классов.
Но в тех случаях, когда свойство не подходит, все равно можно получить методы, которые ведут себя как геттеры или сеттеры. Теперь мои вопросы: должны ли эти имена методов начинаться с get_
/ set_
? Или это неэфтонная вебосность, поскольку часто очевидно, что имеется в виду (и все еще можно использовать строку docstring для уточнения неочевидного ситуации)?
get_city_by_postalcode(postalcode)
или более короткое имя city_by_postalcode
. Я склоняюсь к последнему.5 ответов:
Я думаю, что чем короче, тем лучше, поэтому я предпочитаю более поздний вариант. Но что важно, так это согласованность с вашим проектом: не смешивайте два метода. Если вы прыгаете в чужой проект, сохраните то, что изначально выбрали другие разработчики.
Вы никогда не потеряете шанс заставить ваше свойство вести себя как геттер/сеттер позже, используя дескрипторы . Если вы хотите изменить свойство только для чтения, вы также можете заменить его методом getter с тем же именем, что и свойство, и украсить его @property. Поэтому мой совет-избегать геттеров/сеттеров, если только проект, над которым вы работаете, уже не использует их, потому что вы всегда можете изменить свое мнение позже и сделать свойства доступными только для чтения, только для записи или без них. изменение интерфейса для вашего класса.
Если его можно использовать как свойство (одно значение, которое нужно получить или установить, и никаких других параметров, я обычно делаю:
class Foo(object): def _get_x(self): pass def _set_x(self, value): pass x = property(_get_x, _set_x)
Если геттер / сеттер немного сложнее, я бы использовал get_x и set_x:
Я видел, как это делается в обоих направлениях. Исходя из фона Objective-C, я обычно делаю
foo()/set_foo()
, если я не могу использовать свойство (хотя я стараюсь использовать свойства, когда это возможно). Это действительно не имеет значения, что многое, хотя, , Как долго, как вы последовательны.(Конечно, в вашем примере я бы вообще не называл метод
get_city_by_postalcode()
; я бы, вероятно, пошел сtranslate_postalcode
или чем-то подобным, что использует лучший глагол действия в названии.)