类属性的延迟计算
时间:2022-05-04
本文章向大家介绍类属性的延迟计算,主要内容包括优点、实现、说明、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
目录[-]
所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算。
优点
构造一个延迟计算属性的主要目的是为了提升性能
实现
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类有是三个属性半径(radius)、面积(area)、周长(perimeter)。面积和周长的属性被LazyProperty装饰,下面来试试LazyProperty的魔法:
>>> c = Circle(2)
>>> print c.area
Computing area
12.5663706144
>>> print c.area
12.5663706144
在area()中每计算一次就会打印一次“Computing area”,而连续调用两次c.area后“Computing area”只被打印了一次。这得益于LazyProperty,只要调用一次后,无论后续调用多少次都不会重复计算。
- 手把手教你搭建SpringMVC——最小化配置
- Mysql-16-缓存的配置和使用
- 重叠(Overlapped)IO模型
- Mysql-15-mysql分布式应用
- 基于Spring Mvc实现的Excel文件上传下载
- Java程序员的日常—— Arrays工具类的使用
- Mysql-14-mysql的日志管理
- ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
- Java程序员的日常 —— static的用法讲解实践
- WSAEventSelect模型 ---应用实例,重写TCP服务器实例
- Mysql-13mysql的复制
- 蓝牙门禁系统
- Java程序员的日常 —— 工作一天的收获
- Mysql-12-mysql的备份和恢复
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Good Numbers (hard version) (位运算)
- POJ2236 (并查集)
- B. Minimize the Permutation (贪心)
- 深度学习调参tricks总结!
- JAVA入门学习十三
- 带分数 第四届蓝桥杯省赛C++B组
- codeforce1178B (DP)
- String Modification (CodeCraft-20 (Div. 2))
- codeforces 107A(dfs)
- codeforces 698A(暴力)
- 机器人跳跃问题 (二分)
- codeforces 1066B(贪心)
- 机器学习模型评估指标总结!
- 地宫取宝 (第五届蓝桥杯省赛C++A/B组)
- codeforce 650A (数学)