The delay calculation of Python class attributes the so-called class attribute delay calculation is to define the class attribute as a property, which is only calculated during access, and once accessed, the results will be cached and do not need to be calculated every time.
Advantages
The main purpose of constructing a delayed computing attribute is to improve performance.
Implementation
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
Description
Defines a LazyProperty class for delayed computing. Circle is used for testing. The Circle class has three attributes: radius, area, and perimeter ). LazyProperty is decorated with the property of area and perimeter. let's try the magic of LazyProperty:
>>> c = Circle(2)>>> print c.areaComputing area12.5663706144>>> print c.area12.5663706144
"Computing area" is printed every time calculated in area (). after calling c. area twice in a row, "Computing area" is printed only once. This benefits from LazyProperty. after a call, no matter how many subsequent calls are called, the calculation will not be repeated.