Задать вопрос

Cмысл декоратора property?

class Person:
    first_name = 'First'
    last_name = 'Last'

    @property
    def full_name_1(self):
        return ' '.join([self.first_name, self.last_name])

    def full_name_2(self):
        return ' '.join([self.first_name, self.last_name])


Объясните неучу, чем отличается первый метод от второго?
  • Вопрос задан
  • 28295 просмотров
Подписаться 2 Средний 1 комментарий
Решение пользователя Alexander Lebedev К ответам на вопрос (4)
zymanch
@zymanch
python/django web-developer
что, вкратце, делает декоратор property:
class property(object):
    def __init__(self, fget):
        self.fget = fget

    def __get__(self, obj, type = None):
        return self.fget(obj)

т.о., property реализован через дескриптор, в котором есть только getter
в случае вашего примера, с точки зрения внутренней архитектуры python, разница будет такова:
obj = Person()
# obj.full_name_2()
Person.__dict__['full_name_2'](obj)
# obj.full_name_1
Person.__dict__['full_name_1'].__get__(obj)

зачем это нужно? для себя я вижу пока что только одну причину - отделить свойства класса от методов, позволив обращаться к "вычисляемым" свойствам не как к функциям, а как к атрибутам
Ответ написан
Комментировать