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

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

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

или

total = property(lambda self: self.field_1 + self.field_2)
35
задан parxier 9 March 2010 в 04:00
поделиться

3 ответа

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

22
ответ дан 27 November 2019 в 06:50
поделиться

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

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

update:

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

class Bla(object):
    @property
    def elegant(self):
        return self._elegant

    @elegant.setter
    def elegant(self, value):
        self._elegant = value
51
ответ дан 27 November 2019 в 06:50
поделиться

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

5
ответ дан 27 November 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: