Python类属性的延迟计算

 更新时间:2016年10月22日 10:15:09   作者:j_hao104  
这篇文章主要为大家详细介绍了Python类属性的延迟计算,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

所谓类属性的延迟计算就是将类的属性定义成一个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还能这么玩之用Python做个小游戏的外挂

    Python还能这么玩之用Python做个小游戏的外挂

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过外挂怎么制作出来的呢?现在来看一下怎么制作一个外挂,首先说下,这里的游戏外挂的概念,和那些大型网游里的外挂可不同,不能自动打怪,主要为了提高一下编程技术,需要的朋友可以参考下
    2021-06-06
  • Sanic框架Cookies操作示例

    Sanic框架Cookies操作示例

    这篇文章主要介绍了Sanic框架Cookies操作,结合实例形式分析了Sanic框架cookie读取、写入及删除等简单操作技巧,需要的朋友可以参考下
    2018-07-07
  • Pytest框架 conftest.py文件的使用详解

    Pytest框架 conftest.py文件的使用详解

    conftest.py是pytest特有的本地测试配置文件,既可以用来设置项目级别的fixture,也可以用来导入外部插件,本文给大家介绍Pytest框架 conftest.py文件的使用,感兴趣的朋友一起看看吧
    2022-06-06
  • python类的继承链实例分析

    python类的继承链实例分析

    在本篇文章里小编给大家整理了一篇关于python类的继承链分析内容,有兴趣的朋友们可以学习下。
    2021-04-04
  • Python实现鼠标自动在屏幕上随机移动功能

    Python实现鼠标自动在屏幕上随机移动功能

    这篇文章主要介绍了Python实现鼠标自动在屏幕上随机移动功能,具有很好的参考价值,希望对大家有所帮助。还等什么?一起跟随小编过来看看吧
    2020-03-03
  • 安装Python后IDA中找不到Python模块的问题解决

    安装Python后IDA中找不到Python模块的问题解决

    有天在一台新PC上安装完IDA和Python之后,启动IDA报找不到Python模块的问题,本文就详细的介绍一下解决方法,感兴趣的可以了解一下
    2021-10-10
  • 详解Python Pyside6如何准确嵌入可视化数据图表

    详解Python Pyside6如何准确嵌入可视化数据图表

    Pyside6是一款基于Qt框架的Python GUI开发库。它提供了丰富的UI组件和功能,支持多种操作系统。本文主要介绍了Pyside6嵌入可视化数据图表的方法,需要的可以参考一下
    2023-05-05
  • 你需要掌握的20个Python常用技巧

    你需要掌握的20个Python常用技巧

    Python的可读性和简单性是其广受欢迎的两大原因,本文介绍20个常用的Python技巧来提高代码的可读性,并能帮助你节省大量时间,需要的可以参考一下
    2022-02-02
  • Python使用XlsxWriter库操作Excel详解

    Python使用XlsxWriter库操作Excel详解

    XlsxWriter 是一个功能强大的 Python 模块,专门用于生成 Microsoft Excel 2007及以上版本的电子表格文件,本文主要为大家介绍了如何使用XlsxWriter库进行Excel基本操作,需要的可以参考下
    2023-11-11
  • python 密码验证(滑块验证)

    python 密码验证(滑块验证)

    滑块密码在很多登录界面都可以看到,本文主要介绍了python 密码验证(滑块验证),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论