Python装饰器学习笔记

发布时间:2019-08-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Python装饰器学习笔记脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

最近跟着《流畅的Python》《Python CookBook学习,看到装饰器部分,有些头大@H_304_8@倒不是因为概念难以理解,而是书和网上文章中有些地方有些矛盾之处
简单学习和实践之后,整理出我对装饰器的理解如下

装饰器的定义

在不同语境下,装饰器有不一样的含义,我大致认为有3种定义:

  1. 一种把另一个对象当参数的对象
  2. 一种语法糖
  3. 面对对象设计中的装饰器模式

之所以这里特别指出,是因为在很多文章和书中
把装饰器定义成一个函数,有些更扩展一些,把装饰器定义成一个callable对象
对刚开始学习的读者来说这么解释或许不错,但在使用python过程中,我们发现装饰器可以是

  1. 函数
  2. 类 (例: classmethodPRoPErty)
  3. 实例方法 (例: FLask类的实例approute方法)
  4. 类方法

如果说方法有__call__方法,能符合上面callable对象的定义的话
classmethod类和property类可没__call__方法,所以我认为更准确的定义是我上面总结的前两点

装饰器的作用

广义上说,更优雅地处理对象,相比taget = decorate(target)@decorate可要优雅多了
狭义上说,各种功能:

  1. 禁止函数运行 (刚想到,写个不return原函数的装饰器去装饰某函数,这个函数不就不运行了嘛,不晓得是否有人会这么干)
  2. 记录函数的运行状况
  3. 缓存计算结果
  4. 检查/修改参数
  5. 装逼?
  6. 其他

装饰器的使用注意点

  1. 使用多个装饰器时的运行顺序;最外围/上面的装饰器最晚生效;特别当装饰器返回一个和原先不同类型的对象(比如classmethod)时,更要小心
  2. 记得用functools中的wraps保留被装饰对象的属性
  3. 其他(还没想到)

脚本宝典总结

以上是脚本宝典为你收集整理的Python装饰器学习笔记全部内容,希望文章能够帮你解决Python装饰器学习笔记所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。