>  기사  >  백엔드 개발  >  Python 클래스 속성의 지연 평가

Python 클래스 속성의 지연 평가

高洛峰
高洛峰원래의
2016-11-23 09:53:151197검색

소위 클래스 속성의 지연 계산은 클래스의 속성을 속성으로 정의하는 것으로, 액세스할 때만 계산되며, 일단 액세스하면 결과가 캐시되어 매번 계산할 필요가 없습니다. .

장점

지연 계산 속성을 구성하는 주된 목적은 성능 향상입니다

구현

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로 인해 한 번 호출되면 이후에 몇 번 호출하더라도 다시 계산되지 않습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.