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

Python 클래스 속성의 지연 평가

WBOY
WBOY원래의
2016-12-05 13:27:161225검색

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

장점

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

업적

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 value


import math


class 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 클래스에는 반경, 면적, 둘레의 세 가지 속성이 있습니다. 면적과 둘레의 속성은 LazyProperty로 장식됩니다. LazyProperty의 마법을 사용해 보겠습니다.

>>> c = Circle(2)
>>> print c.area
Computing area
12.5663706144
>>> print c.area
12.5663706144

"계산 영역"은 Area()의 각 계산에 대해 한 번만 인쇄되지만 "계산 영역"은 c.area를 두 번 호출한 후에 한 번만 인쇄됩니다. 이는 LazyProperty로 인해 한 번 호출되면 이후에 몇 번 호출하더라도 다시 계산되지 않습니다.

위 글의 내용은 모두의 공부에 도움이 되길 바랍니다.

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