소위 클래스 속성의 지연 계산은 클래스의 속성을 속성으로 정의하는 것으로, 액세스할 때만 계산되며, 일단 액세스하면 결과가 캐시되어 매번 계산할 필요가 없습니다. .
장점
지연 계산 속성을 구성하는 주된 목적은 성능 향상입니다
구현
class LazyProperty(object): def __init__(self, func): self.func = func def __get__(self, instance, owner): if instance is None: return self else: value = self.func(instance) setattr(instance, self.func.__name__, value) return valueimport mathclass Circle(object): def __init__(self, radius): self.radius = radius @LazyProperty def area(self): print 'Computing area' return math.pi * self.radius ** 2 @LazyProperty def perimeter(self): print 'Computing perimeter' return 2 * math.pi * self.radius
설명
정의 느리게 평가되는 데코레이터 클래스 LazyProperty입니다. Circle은 테스트에 사용되는 클래스입니다. Circle 클래스에는 반경, 면적, 둘레의 세 가지 속성이 있습니다. Area와 perimeter의 속성은 LazyProperty로 장식됩니다. LazyProperty의 마법을 시험해 보겠습니다.
>>> c = Circle(2) >>> print c.area Computing area 12.5663706144 >>> print c.area 12.5663706144
area()에서는 계산할 때마다 "계산 영역"이 한 번 인쇄되고 c가 호출됩니다. 연속으로 두 번. "컴퓨팅 영역"은 .area 다음에 한 번만 인쇄됩니다. 이는 LazyProperty로 인해 한 번 호출되면 이후에 몇 번 호출하더라도 다시 계산되지 않습니다.