Интересно, стоит ли мне просто отказаться от использования свойств в python

Я пытался использовать в своем приложении свойства вместо определенных методов задания и получения. Они кажутся более питоническими и в целом делают мой код более читабельным.

Более читабельным, за исключением одной проблемы: Опечатки.

рассмотрим следующий простой пример (обратите внимание, что мои свойства фактически выполняют некоторую обработку, хотя приведенные здесь примеры просто устанавливают или возвращают простая переменная)

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, и я не жалуюсь на это. Просто интересно, не лучше ли мне использовать явные сеттеры и геттеры.

11
задан Ben 26 October 2010 в 08:26
поделиться