Задать вопрос
  • Cмысл декоратора property?

    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)

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

    @abcd0x00
    >>> 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])
    ... 
    >>> p = Person()
    >>> p.full_name_1
    'First Last'
    >>> p.full_name_2()
    'First Last'
    >>> p.full_name_2
    <bound method Person.full_name_2 of <__main__.Person object at 0xb739a5ec>>
    >>>
    Ответ написан
    1 комментарий