python的cached_property装饰器

直接上源码, 看一哈

英文doc的意思:

每个实例只计算一次的属性,然后用普通属性替换自身。删除属性将重置属性。
class cached_property(object):
    """
    A property that is only computed once per instance and then replaces itself
    with an ordinary attribute. Deleting the attribute resets the property.
    Source: https://github.com/bottlepy/bottle/commit/fa7733e075da0d790d809aa3d2f53071897e6f76
    """  # noqa

    def __init__(self, func):
        self.__doc__ = getattr(func, "__doc__")
        self.func = func

    def __get__(self, obj, cls):
        if obj is None:
            return self
        value = obj.__dict__[self.func.__name__] = self.func(obj)
        return value

其实就保存到实例字典__dict__中, 避免多次调用重复计算

举个代码例子

class Test(object):

    test1 = 'aaa'
    def __init__(self):
        self.age = 20

    @cached_property
    def real_age(self):
        return self.age + 19


if __name__ == '__main__':
    t = Test()

    print t.real_age  # 39
    print t.__dict__  # {'real_age': 39, 'age': 20}, 不加装饰器就不存在__dict__中了

Python平凡之路
Python学习的记录分享,欢迎大家批评指正。 走弯路让你见识更广,走直路让时复更低。

没得啥, 慢慢学吧

19 声望
2 粉丝
0 条评论
推荐阅读
MySQL常用语法命令及函数
创建数据库 create database 数据库名; 查看数据库 show databases; 选择数据库 use 数据库名; 删除数据库 drop database 数据库名; 创建表 create table 表名(属性名1 数据类型 ,属性名2 数据类型。。。。); 查...

Alei_杨磊阅读 1.7k

又一款眼前一亮的Linux终端工具!
今天给大家介绍一款最近发现的功能十分强大,颜值非常高的一款终端工具。这个神器我是在其他公众号文章上看到的,但他们都没把它的强大之处介绍明白,所以我自己体验一波后,再向大家分享自己的体验。

良许6阅读 1.9k

FastAPI性能碾压Flask?
不止一次的听过,FastAPI性能碾压Flask,直追Golang,不过一直没有测试过,今天闲着没事测试一下看看结果。不知道是哪里出了问题,结果大跌眼镜。

二毛erma02阅读 10.3k评论 3

封面图
Linux终端居然也可以做文件浏览器?
大家好,我是良许。在抖音上做直播已经整整 5 个月了,我很自豪我一路坚持到了现在【笑脸】最近我在做直播的时候,也开始学习鱼皮大佬,直播写代码。当然我不懂 Java 后端,因此就写写自己擅长的 Shell 脚本。但...

良许1阅读 2.1k

Python之如何优雅的重试
为了避免偶尔的网络连接失败,需要加上重试机制,那么最简单的形式就是在对应的代码片段加一个循环,循环体里使用异常捕获,连接成功时退出循环,否则就重复执行相关逻辑,此时修改之后的函数f如下

Harpsichord12073阅读 7.4k

基于 EKS Fargate 搭建微服务性能分析系统
近期 Amazon Fargate 在中国区正式落地,因 Fargate 使用 Serverless 架构,更加适合对性能要求不敏感的服务使用,Pyroscope 是一款基于 Golang 开发的应用程序性能分析工具,Pyroscope 的服务端为无状态服务且性...

亚马逊云开发者阅读 7.8k

ChatGPT的开源平替,终于来了!
最近这段时间,一个号称全球最大ChatGPT开源平替项目Open Assistant引起了大家的注意。这不最近还登上了GitHub的Trending热榜。[链接]根据官方的介绍,Open Assistant也是一个对话式的大型语言模型项目,可以理解...

CodeSheep2阅读 1.1k

封面图

没得啥, 慢慢学吧

19 声望
2 粉丝
宣传栏