Sunday, November 18, 2012

Декоратор cached_property

Дисклаймер: Все права на данный материал принадлежат Хабрахабр / Лучшие за сутки / Посты и могут быть найдены по ссылкам ниже.

Как часто вы пишете такие конструкции?

class SomeClass(object):     @property     def param(self):         if not hasattr(self, '_param'):             self._param = computing()         return self._param      @param.setter     def param(self, value):         self._param = value      @param.deleter     def param(self):         del self._param 

Это очень удобно, значение атрибута param при таком подходе не хранится напрямую в объекте, но и не вычисляется каждый раз. Вычисление происходит при первом обращении, и это значение сохраняется в объекте под временным именем _param. Если меняются условия, от которых зависит значение param, его можно удалить, и тогда оно снова вычислится при следующем обращении. Или можно сразу присвоить актуальное значение, если таковое известно.

У этого кода есть и минусы: у объекта появляется лишний атрибут с именем _param; при каждом обращении к атрибуту вызывается метод param(), который делает проверку hasattr; получившийся код достаточно большой, особенно если таких атрибутов в классе несколько.
Читать дальше →

АВТОР: Хабрахабр / Лучшие за сутки / Посты http://habrahabr.ru/post/159099/




ifttt
Put the internet to work for you. via Personal Recipe 1574425

No comments:

Post a Comment

Search This Blog