Недавно я просмотрел существующую кодовую базу, содержащую много классов, где атрибуты экземпляра отражают значения, хранящиеся в базе данных.Я реорганизовал многие из этих атрибутов, чтобы их поиск в базе данных был отложен, т.е.не инициализироваться в конструкторе, а только при первом чтении.Эти атрибуты не меняются в течение всего времени существования экземпляра, но они являются реальным узким местом для вычисления этого первого раза и доступны только для особых случаев.Следовательно, они также могут быть кэшированы после того, как они были извлечены из базы данных (это соответствует определению памятка , где ввод просто «без ввода»).следующий фрагмент кода снова и снова для различных атрибутов в различных классах:
class testA(object):
def __init__(self):
self._a = None
self._b = None
@property
def a(self):
if self._a is None:
# Calculate the attribute now
self._a = 7
return self._a
@property
def b(self):
#etc
Существует ли уже существующий декоратор, чтобы сделать это уже в Python, о котором я просто не знаю?Или есть достаточно простой способ определить декоратор, который это делает?
Я работаю в Python 2.5, но ответы 2.6 могут быть все еще интересны, если они значительно отличаются.
Примечание
Этот вопрос был задан до того, как Python включил в него множество готовых декораторов.Я обновил его только для исправления терминологии.