Должен ли я использовать префиксы get_ / set_ в именах методов Python? - PullRequest
13 голосов
/ 17 декабря 2008

В Python свойства используются вместо геттеров в стиле Java, сеттеров. Поэтому редко можно увидеть методы get ... или set .. в открытых интерфейсах классов.

Но в случаях, когда свойство не подходит, можно по-прежнему иметь методы, которые ведут себя как методы получения или установки. Теперь мои вопросы: должны ли эти имена методов начинаться с get_ / set_? Или это непифоническая волнистость, поскольку часто очевидно, что имеется в виду (и все же можно использовать строку документации для прояснения неочевидных ситуаций)?

Это может быть вопросом личного вкуса, но мне было бы интересно, что большинство думает по этому поводу? Что бы вы предпочли как пользователь API?

Пример: скажем, у нас есть объект, представляющий несколько городов. Можно использовать метод get_city_by_postalcode(postalcode) или использовать более короткое имя city_by_postalcode. Я склоняюсь к последнему.

Ответы [ 5 ]

6 голосов
/ 17 декабря 2008

Вы никогда не упустите возможность заставить свое свойство вести себя как получатель / установщик позже, используя дескрипторы . Если вы хотите изменить свойство только для чтения, вы также можете заменить его методом getter с тем же именем, что и у свойства, и украсить его @property. Поэтому я советую избегать методов получения / установки, если только проект, над которым вы работаете, их уже не использует, потому что вы всегда можете передумать и сделать свойства доступными только для чтения, только для записи или как угодно, не изменяя интерфейс для вашего класса.

4 голосов
/ 17 декабря 2008

Если его можно использовать как свойство (одно значение для получения или установки, а других параметров нет, я обычно это делаю:

class Foo(object):

    def _get_x(self):
        pass

    def _set_x(self, value):
        pass

    x = property(_get_x, _set_x)

Если метод получения / установки более сложен, чем это, я бы использовал get_x и set_x:

3 голосов
/ 17 декабря 2008

Я думаю, что чем короче, тем лучше, поэтому я предпочитаю позже. Но важно соответствовать вашему проекту: не смешивайте два метода. Если вы запрыгиваете в чужой проект, оставьте то, что изначально выбрали другие разработчики.

1 голос
/ 17 декабря 2008

Я видел, как это делается в обоих направлениях. Исходя из фона Objective-C, я обычно делаю foo()/set_foo(), если не могу использовать свойство (хотя я стараюсь использовать свойства всякий раз, когда это возможно). Это не имеет большого значения, однако, , если вы последовательны .

(Конечно, в вашем примере я бы вообще не стал вызывать метод get_city_by_postalcode(); я бы, вероятно, пошел с translate_postalcode или чем-то подобным, в названии которого используется лучший глагол действия.)

0 голосов
/ 17 декабря 2008

Если мне нужно использовать геттер / сеттер, мне это нравится так:

Предположим, у вас есть переменная self._x. Тогда x () вернет значение self._x, а setX (x) установит значение self._x

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...