美文网首页
Python 使用延迟计算属性

Python 使用延迟计算属性

作者: noteby | 来源:发表于2018-11-29 16:42 被阅读0次

很多时候,构造一个延迟计算属性的主要目的是为了提升性能

你想将一个只读属性定义成一个property,并且只在访问的时候才会计算结果。
但是一旦被访问后,你希望结果值被缓存起来,不用每次都去计算。

定义一个延迟属性的一种高效方法是通过使用一个描述器类,如下:

import math


class Lazyproperty:
    def __init__(self, func):
        self.func = func

    def __get__(self, instance, cls):
        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):
        print('Computing perimeter')
        return 2 * math.pi * self.radius


c = Circle(1)
print(c.area)
print(c.perimeter)

相关文章

  • Python 使用延迟计算属性

    很多时候,构造一个延迟计算属性的主要目的是为了提升性能 你想将一个只读属性定义成一个property,并且只在访问...

  • 使用延迟计算属性

    问题 你想将一个只读属性定义成一个 property,并且只在访问的时候才会计算结果。但是一旦被访问后,你希望结果...

  • iOS中Swift从开始入门到最后的放弃(十3,

    # 延迟计算属性 ####有关延迟计算属性的问题 首先,延迟计算属性本质上就是一个闭包,如果调用的时候这个属性有值...

  • 利用Python延迟初始化提升性能

    来源:Python中文社区 所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,...

  • Swift的延迟存储属性

    延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性。在属性声明前使用lazy来标示一个延迟存储属性。延迟属...

  • 属性和方法

    1、属性 存储属性 延迟存储属性 计算属性 只读计算属性 只有 getter 方法但没有 setter 方法的计算...

  • python: 类属性的延迟计算

    初稿于3.24 延迟计算 所谓延迟,就是将类的某个属性定义成property,这样可以在访问时才进行计算,并且计算...

  • Swift—懒加载

    *延迟存储属性* * 延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性。在属性声明前使用lazy来标示一...

  • iOS开发之Swift篇(9)—— 属性

    目录 版本 存储属性 延迟加载存储属性 计算属性 只读计算属性 属性观察器 类型属性 版本 Xcode 11.3....

  • Swift基础语法-类的属性: 存储属性,延迟存储属性,计算属性

    本节知识点 存储属性 常量存储属性 类和结构体常量与存储属性的关系 延迟存储(懒加载)属性 计算属性 只读计算属性...

网友评论

      本文标题:Python 使用延迟计算属性

      本文链接:https://www.haomeiwen.com/subject/mkmfcqtx.html