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