隐藏页面特效

属性惰性求值

1|0问题


将一个只读的属性定义为property属性方法,只有在访问它时才参与计算。 但是,一旦访问了该属性,我们希望把计算的值缓存起来,不要每次访问它时都重新计算。

2|0解决方案


class lazyproperty: def __init__(self, func): self.func = func def __get__(self, instance, cls): """ 当被访问的属性不在底层的实例字典中时,__get__()方法才会被调用 第一次访问时,给实例设置了属性和值, 第二次访问时,直接从实例字典中获取,没有访问__get__()方法 """ print("instance: ", instance) print("cls: ", cls) if instance is None: return self else: value = self.func(instance) setattr(instance, self.func.__name__, value) return value import math class Circle: def __init__(self, radius) -> None: self.radius = radius @lazyproperty # lazyproperty(area) 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 if __name__ == '__main__': c = Circle(4.0) # print(c.radius) print(c.area) print(c.area) # 第二次打印时直接从实例字典从获取

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/17889108.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示