Python类属性的延迟计算


Posted in Python onOctober 22, 2016

所谓类属性的延迟计算就是将类的属性定义成一个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,只要调用一次后,无论后续调用多少次都不会重复计算。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
对Python中plt的画图函数详解
Nov 07 Python
python根据url地址下载小文件的实例
Dec 18 Python
python实现公司年会抽奖程序
Jan 22 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
Python  Django 母版和继承解析
Aug 09 Python
使用Python画出小人发射爱心的代码
Nov 23 Python
python实现126邮箱发送邮件
May 20 Python
最新Python idle下载、安装与使用教程图文详解
Nov 28 Python
总结Python变量的相关知识
Jun 28 Python
如何在Python函数执行前后增加额外的行为
Oct 20 #Python
如何利用Fabric自动化你的任务
Oct 20 #Python
windows下ipython的安装与使用详解
Oct 20 #Python
Python做文本按行去重的实现方法
Oct 19 #Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 #Python
python类中super()和__init__()的区别
Oct 18 #Python
Python 序列的方法总结
Oct 18 #Python
You might like
pdo中使用参数化查询sql
2011/08/11 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
讲解Python中if语句的嵌套用法
2015/05/14 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
Python3中bytes类型转换为str类型
2018/09/27 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
新浪微博实习心得体会
2014/01/27 职场文书
个人委托书格式
2014/04/04 职场文书
抗震救灾标语
2014/06/26 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
P站美图推荐——变身女主角特辑
2022/03/20 日漫
Java 超详细讲解hashCode方法
2022/04/07 Java/Android