这篇文章要解决的问题:
# 装饰器是什么?
# 装饰器的种类?
# 为什么使用装饰器?
# 怎么使用装饰器?
# 装饰器
# 先来一个基础知识,上一篇文章Python进阶-多重嵌套和闭包 说到在python中 函数属于‘一等公民’,可以相互嵌套。不仅仅是可以相互嵌套,函数还可以作为参数传递
# 举个例子
函数作为参数传递# 上面这个例子其实就是一个简单的装饰器,现在我们让他高大上一点,更有用处一点
# 我们在执行方法的前后分别log出方法名称 这样有利于我们看log 改bug
为已经存在的函数dosomething添加额外的功能解释一下:
# dosometing 是一个函数的引用 传递给getFunName
# getFunName 其实是返回的swagger 对象,最后一个() 表示执行swagger函数对象
# 我们成功的在doSomeThing函数前后加入了想加入的log
# 再向前一步走 没错 @ 符号就是装饰器的语法糖
@语法糖# 不需要再用装饰函数调用了,直接调用我们想调用的函数,只需要用@ 装饰一下 也实现了我们的需求
# 现在对装饰器有了一个基本的了解
# 带参数的装饰器
# 在这里进一步优化刚才的方法,刚才是可以在其他方法执行前后输出log ,那么通常log 会有一些等级 比如 info warn
# 我们给装饰器加上一个参数 按需返回
带参数的装饰器# 内置装饰器(进传送门看吧)
# @property Python入门-面向对象.继承.封装.多态
# @staticmethod @classmethod Python入门-面向对象.继承.封装.多态
# 类装饰器
# 装饰器函数其实是一个接口约束,它必须接受一个callable对象作为参数,然后返回一个callable对象。
# 在Python中一般callable对象都是函数,但也有例外。只要某个对象重载了__call__()方法,那么这个对象就是callable的。
# 举一个例子
类对象调用内置函数# 所以,类也可以作为装饰器
类装饰器# 装饰器的顺序
直接看 更直观装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能, 装饰器的返回值也是一个函数/类对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景,装饰器是解决这类问题的绝佳设计。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
网友评论