The so-called latency calculation of class attributes defines the class attributes as a property, which is calculated only when Accessed. once accessed, the results will be cached, you do not need to calculate it every time. The main purpose of constructing a delayed computing attribute is to improve the performance. before getting started with the subject, we can understand the usage of the property. The property can convert the access of the property into a method call. The delay calculation of a class attribute is to define a class attribute as a property, which is only calculated during access. once accessed, the results will be cached, you do not need to calculate it every time. The main purpose of constructing a delayed computing attribute is to improve performance.
Property
Before proceeding to the topic, let's take a look at the usage of property. property can convert access to properties into method calls.
class Circle(object): def __init__(self, radius): self.radius = radius @property def area(self): return 3.14 * self.radius ** 2 c = Circle(4) print c.radius print c.area
As you can see, although area is defined as a method, after adding @ property, you can directly execute c. area as a property access.
Now the question is, every call to c. area will be calculated once, which is a waste of cpu. how can we calculate only once? This is lazy property.
Code 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.
The above is a detailed description of delayed initialization for Python performance improvement. For more information, see other related articles in the first PHP community!