Я пытаюсь использовать свойства, а не конкретные сеттеры и геттеры в моем приложении. Они кажутся более pythonic и, как правило, делают мой код более удобочитаемым.
Более читаемый, за исключением одного вопроса: Typos.
рассмотрим следующий простой пример (обратите внимание, что мои свойства действительно выполняют некоторую обработку, даже если примеры здесь просто устанавливают или возвращают простую переменную)
class GotNoClass(object):
def __init__(self):
object.__init__(self)
self.__a = None
def __set_a(self, a):
self.__a = a
def __get_a(self):
return self.__a
paramName = property(__get_a, __set_a)
if __name__ == "__main__":
classy = GotNoClass()
classy.paramName = 100
print classy.paramName
classy.paranName = 200
print classy.paramName
#oops! Typo above! as seen by this line:
print classy.paranName
Результат, как увидит мало кто читает, есть:
100
100
200
К сожалению. Должно быть, за исключением того, что я сделал опечатку - я написал paranName (два n) вместо paramName.
Это легко отлаживается на этом простом примере, но это причиняет мне боль в моем более крупном проекте. Поскольку python с радостью создает новую переменную, когда я случайно использовал свойство, я получаю тонкие ошибки в своем коде. Ошибки, которые я нахожу трудно отслеживать время от времени. Хуже того, я когда-то дважды использовал одну и ту же опечатку (однажды, когда я устанавливал, а позже, когда я получал), поэтому мой код, похоже, работал, но намного позже, когда другая ветка кода наконец попыталась получить доступ к этому свойству (правильно) Я получил неправильное значение - но мне потребовалось несколько дней, прежде чем я понял, что мои результаты были немного отброшены.
Теперь, когда я знаю, что это проблема, я трачу больше времени на то, чтобы внимательно прочитать мой код, но в идеале у меня был бы способ поймать эту ситуацию автоматически - если я пропустил только один, я могу ввести ошибку, которая не показывает пока не пройдет честное время...
Так что я задаюсь вопросом, нужно ли мне просто переключиться на использование старых старых сеттеров и геттеров? Или есть какой-то аккуратный способ избежать этой ситуации? Люди просто полагаются на себя, чтобы поймать эти ошибки вручную? Увы, я не профессиональный программист, просто кто-то пытается получить что-то на работе, и я действительно не знаю, как лучше подойти к этому.
Спасибо.
P.S. Я понимаю, что это тоже одно из преимуществ Python, и я не жалуюсь на это. Просто интересно, буду ли я лучше использовать явные сеттеры и геттеры.