学习博主 https://zhuanlan.zhihu.com/p/24165119 的代码,里面有个关于实现延迟计算的代码片段,记录一下.
class LazyProperty():
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
使用时把这个类作为装饰器使用
class Circle():
def __init__(self, radius):
self.radius = radius
@LazyProperty
def area(self):
print("Computing area")
return math.pi * self.radius ** 2
@LazyProperty
def perimeter(self):
return 2 * math.pi * self.radius
if __name__ == "__main__":
c = Circle(2)
print("type(Circle.area)={0}".format(type(Circle.area)))
print("c._