Я пытался использовать в своем приложении свойства вместо определенных методов задания и получения. Они кажутся более питоническими и в целом делают мой код более читабельным.
Более читабельным, за исключением одной проблемы: Опечатки.
рассмотрим следующий простой пример (обратите внимание, что мои свойства фактически выполняют некоторую обработку, хотя приведенные здесь примеры просто устанавливают или возвращают простая переменная)
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 с радостью создает новую переменную, когда я случайно хотел использовать свойство, я получаю небольшие ошибки в своем коде. Ошибки, которые мне иногда трудно отследить. Еще хуже, Однажды я использовал одну и ту же опечатку дважды (один раз, когда я устанавливал, а затем один раз, когда я получал), поэтому мой код, казалось, работал, но намного позже, когда другая ветвь кода наконец попыталась получить доступ к этому свойству (правильно), я получил неверное значение - но мне потребовалось несколько дней, прежде чем я понял, что мои результаты были немного неверными.
Теперь, когда я знаю, что это проблема, я трачу больше времени, внимательно читая свой код, но в идеале я бы способ поймать эту ситуацию автоматически - если я пропущу хотя бы одну, я могу ввести ошибку, которая не появится до тех пор, пока не пройдет изрядное количество времени ...
Так что мне интересно, стоит ли мне просто переключиться на использование старых добрых сеттеров и геттеры? Или есть какой-нибудь изящный способ избежать этой ситуации? Неужели люди просто полагаются на себя, чтобы вручную отловить эти ошибки? Увы, я не профессиональный программист, Я понимаю, что это тоже одно из преимуществ Python, и я не жалуюсь на это. Просто интересно, не лучше ли мне использовать явные сеттеры и геттеры.