Предпочтительный способ определения свойств в Python: декоратор свойств или лямбда?

Что является предпочтительным способом определения свойств класса в Python и почему? Можно ли использовать оба метода в одном классе?

@property def total(self): return self.field_1 + self.field_2 

или

 total = property(lambda self: self.field_1 + self.field_2) 

  • Python @property против геттеров и сеттеров
  • list @property оформленные методы в классе python
  • Переопределение свойств в python
  • свойство python getter / setter путаница
  • Как добавить свойство в класс динамически?
  • Как перечислить все свойства класса
  • 3 Solutions collect form web for “Предпочтительный способ определения свойств в Python: декоратор свойств или лямбда?”

    Форма декоратора, вероятно, лучше всего в том случае, когда вы указали, где вы хотите превратить метод в свойство только для чтения. Второй случай лучше, если вы хотите предоставить setter / deleter / docstring, а также getter, или если вы хотите добавить свойство, которое имеет другое имя, к методу, из которого оно получает свое значение.

    Для свойств только для чтения я использую декоратор, иначе я обычно делаю что-то вроде этого:

     class Bla(object): def sneaky(): def fget(self): return self._sneaky def fset(self, value): self._sneaky = value return locals() sneaky = property(**sneaky()) 

    Обновить:

    Последние версии python улучшили подход декоратора:

     class Bla(object): @property def elegant(self): return self._elegant @elegant.setter def elegant(self, value): self._elegant = value 

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

    Python - лучший язык программирования в мире.