原标题:python之懒惰属性(延迟初始化)

Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建的结果,然后每次调用的时候直接返回该结果。延迟初始化主要用于提高性能,避免浪费计算,并减少程序的内存需求。

1. 温故下property

property可以将属性的访问转变成方法的调用

可以看到,area虽然是定义成一个方法的形式,但是加上@property后,可以直接执行c.area,当成属性访问。

现在问题来了,每次调用c.area,都会计算一次,太浪费cpu了,怎样才能只计算一次呢?这就是lazy property

2.lazy property实现

实现延迟初始化有两种方式,一种是使用python描述符,另一种是使用@property修饰符

方法1:

结果'evalute'只输出了一次。在lazy类中,我们定义了__get__()方法,所以它是一个描述符。当我们第一次执行c.area时,python解释器会先从c.__dict__中进行查找,没有找到,就从Circle.__dict__中进行查找,这时因为area被定义为描述符,所以调用__get__方法。

在__get__()方法中,调用实例的area()方法计算出结果,并动态给实例添加一个同名属性area,然后将计算出的值赋予给它,相当于设置c.__dict__['area']=val。

当我们再次调用c.area时,直接从c.__dict__中进行查找,这时就会直接返回之前计算好的值了。

方法2:

这里与方法1异曲同工,在area()前添加@lazy_property相当于运行以下代码:

lazy_property(area)

lazy_property()方法返回_lazy_property,_lazy_property又会调用_lazy_property()方法,剩下的操作与方法1类似。

责任编辑:

python中area是什么意思_python之懒惰属性(延迟初始化)相关推荐

  1. python中area是什么意思_python中none表示什么

    Q1:python里None 表示False吗 通常不这样表达.因为在python里定义find如果不为0和正数就是没有找到.并不一定是-1 一般是这样写if s.find("a" ...

  2. python基础教程:懒惰属性(延迟初始化)

    Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建的结果,然后每次调用的时候直接返回该结果.延迟初始化主要用于提高性能,避免浪费计算,并减少程序的内存需求. 1. ...

  3. python中area是什么意思_python – 与openCV 3中的contourArea的兼容性问题

    我试图对findContours得到的轮廓进行简单的面积计算. 我的openCv版本是3.1.0 我的代码是: cc = cv2.findContours(im_bw.copy(), cv2.RETR ...

  4. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  5. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  6. python中异或怎么算_python 异或运算的前提_异或运算公式

    Python基础(10)–数字-Python-第七城市 609x288 - 73KB - JPEG Python基础(10)--数字_资讯_突袭网 609x288 - 33KB - JPEG pyth ...

  7. python中pandas是指什么_Python中的神器Pandas,但是有人说Pandas慢...

    原标题:Python中的神器Pandas,但是有人说Pandas慢... 如果你从事大数据工作,用Python的Pandas库时会发现很多惊喜.Pandas在数据科学和分析领域扮演越来越重要的角色,尤 ...

  8. Python中菱形继承的MRO顺序及property属性

    Python中菱形继承的MRO顺序及property属性 文章目录 Python中菱形继承的MRO顺序及property属性 一.Python中菱形继承的MRO顺序 1. 单独调用父类的方法 2. 多 ...

  9. python中的多态是什么_Python中的多态

    python中的多态是什么 Polymorphism is a concept of Object Oriented Programming, which means multiple forms o ...

最新文章

  1. R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表
  2. 读DL论文心得之SPP
  3. 组合总和Python解法
  4. C# ?. 判斷Null值
  5. 时间管理——你不可不知的3种时间管理方法
  6. python中如何输入矩阵_python - 如何向矩阵中添加向量_numpy_酷徒编程知识库
  7. php task todolist,Todolist--(4)登录
  8. python3高级 之 生成器
  9. linux静态反汇编工具,源码恢复反汇编静态分析工具IDA pro
  10. 添加类库引用后,命名空间出错的解决方案
  11. NLPIR java测试(没找到范例代码)
  12. java贪吃蛇代码_java贪吃蛇游戏实现代码
  13. chinapub matlab,MATLAB 2020从入门到精通
  14. java对接云之家群聊机器人
  15. Windows 10 运行python弹出windows应用商店
  16. wifi7000米远程连接服务器失败,【电视派控制设备连wifi总失败 怎么办?】PjTime.COM 应用技巧 创维...
  17. 用计算机弹歌夜空中最亮的星,计算机弹《夜空中最亮的星》 网友:学会了去撩妹...
  18. dp模式是什么意思_DP的完整形式是什么?
  19. 【超融合】超融合产品怎么选?
  20. pe重装系统后F盘无法打开系统拒绝访问解决方案

热门文章

  1. 50款可以替代桌面软件的在线服务
  2. 【BZOJ 3470】3470: Freda’s Walk 期望
  3. 宣化科技职业学院计算机哪个校区,宣化科技职业学院宿舍怎么样
  4. 使用pm命令安装或卸载apk,静默安装、卸载方法
  5. 使用Cobbler批量部署Linux和Windows
  6. 网管软件 LANDesk的配置(视频配截图)
  7. 公司不让使用XShell破解版后,我准备用这种方式!
  8. linux 深度 crossover,在Deepin V20(UOS)下使用crossover安装Kt交易师的方法
  9. Word 框里面打钩
  10. 0. DRF之软件开发模式CBV源码解析