최근에 인스턴스 속성이 데이터베이스에 저장된 값을 반영하는 많은 클래스를 포함하는 기존 코드베이스를 살펴 보았습니다. 데이터베이스 조회가 지연되도록 이러한 속성을 많이 리팩토링했습니다. 생성자에서 초기화되지 않고 처음 읽을 때만 초기화됩니다. 이러한 속성은 인스턴스의 수명 동안 변경되지 않지만 처음 계산하는 데에는 실제 병목 현상이 발생하고 특수한 경우에만 실제로 액세스됩니다. 따라서 데이터베이스에서 검색된 후에도 캐시 될 수 있습니다 (따라서 입력이 단순히 "입력 없음" 인 메모 화 정의에 적합 ).
다양한 클래스의 다양한 속성에 대해 다음 코드 스 니펫을 반복해서 입력합니다.
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 2.5에서 작업하고 있지만 2.6 답변이 크게 다르면 여전히 흥미로울 수 있습니다.
노트
이 질문은 파이썬이이를 위해 많은 기성 데코레이터를 포함하기 전에 질문되었습니다. 용어를 수정하기 위해서만 업데이트했습니다.
functools.lru_cache()입니다.