博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python全栈脱产第11天------装饰器
阅读量:4520 次
发布时间:2019-06-08

本文共 982 字,大约阅读时间需要 3 分钟。

装饰器

  定义:器是指具备某一功能的工具,装饰指的是为被装饰器对象添加新功能,所以装饰器就是为被装饰对象添加新功能的工具

    注意:装饰器本身可以是任意可调用的对象,被装饰器的对象也可以是任意可调用对象

  用处:开放封闭原则:封闭指的是对修改封闭,对扩展开放

  遵循两大原则:1.不修改被装饰对象的源代码

         2.不修改被装饰对象的调用方式

  目标:在遵循两大原则的前提下为被装饰对象添加上新功能

  用法:

  def foo(func):

    def wrapper(*args,**kwargs):

      res=func(*args,**kwargs)

    return res

  return wrapper

  装饰器的语法糖:在被装饰对象正上方单独一行写@装饰器的名字

        原理:python解释器一旦运行到@装饰器的名字,就会调用装饰器,然后将被装饰函数的地址当做参数传给装饰器,最后将装饰器运行的结果赋值给原函数名

  

  def foo(func):

    def wrapper(*args,**kwargs):

      res=func(*args,**kwargs)

    return res

  return wrapper

  @foo()

  def index():

    print(xxx)

  index()

  叠加多个装饰:解释@语法的时候是自下而上,执行装饰器内的函数是自上而下

  有参装饰器:需要在装饰器外面再套一个函数用于传参  

def outter1(x,y,z):     def outter2(func):         def wrapper(*args,**kwargs):             res=func(*args,**kwargs)             return res         return wrapper     return outter2     wraps装饰器:导入wraps模块,应加在装饰器最内层的函数上,@wraps(func),用于将装饰器内函数伪装成和被装饰对象一样

转载于:https://www.cnblogs.com/zhouyi0316/p/9433000.html

你可能感兴趣的文章
LintCode-Topological Sorting
查看>>
自定义引用类型的Enumerable.Union调用(原创)
查看>>
Keil c中自定义带可变参数的printf函数
查看>>
抽象类实例
查看>>
react context prop-types
查看>>
Java之路——Java初接触
查看>>
2018.12.27学习JavaScript
查看>>
Cocoa编程开发者手册
查看>>
C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节
查看>>
html5基础学习
查看>>
理工之 A+B Problem III
查看>>
SalesForce自定义按钮(javascript执行),点击按钮更新Filed
查看>>
Android中ViewPager实现滑动条及与Fragment结合的实例教程
查看>>
组织过程资产与事业环境因素
查看>>
学习和思考的要点
查看>>
java问题解读,String类为什么是final的
查看>>
JavaWeb项目用浏览器打开网页出现Session Error提示的解决办法
查看>>
软件工程第一次作业
查看>>
【Android 界面效果24】Intent和PendingIntent的区别
查看>>
node学习之搭建服务器并加装静态资源
查看>>