装饰器

Posted ob19227

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。

函数的开放封闭原则:  对扩展是开放的 对修改是封闭的

装饰器的主要功能:

  在不改变函数调用方式的基础上在函数的前、后添加功能。

装饰器的本质:一个闭包函数

装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

 

 1 ===========================#装饰器的基本形态=============================
 2 def 装饰器名 ( 被装饰主函数名 ):
 3     def 内层函数名 ( 被装饰主函数参数 ):
 4         先执行 被装饰主函数还未执行 前 添加的操作     #装饰器操作      
 5         V = 被装饰主函数名()
 6         再执行  被装饰主函数执行结束 后 添加的动作     #装饰器操作
 7         return V  #(被装饰函数的返回值)(可有可无)
 8     return 内层函数名       #这里是装饰器函数的返回值,return 的是内层函数地址
 9 @装饰器名    <=====>  被装饰主函数名 = 装饰器名 (被装饰主函数名) 
10              # 实质上是被装饰主函数名 = 装饰器函数的返回值,也就是内层函数名
11 def 被装饰函数名 ( 被装饰函数参数 ):   #这里调用主函数,因为装饰器而等于调用内层函数
12      被装饰函数,也就是主体函数的函数体
13       return 主体函数的返回值 #(可有可无)
14=========================================================================
 #=====================装饰器基本形态=========================
1
def wrapper ( func ): 2 def inner ( *args **kwargs ): 3 print(函数执行前添加的动作) 4 V = func( *args **kwargs ) 5 print(函数执行后添加的动作) 6 return V 7 return inner 8 @wrapper #func = wrapper ( func )--返回值-->inner 9 def func ( *args **kwargs ): 10 print(这是主函数体) 11 return V
===========================================================

在函数使用装饰器后,查看注释信息方法不能用,这是需要使用functool模块的wraps功能

 1 from functools import wraps
 2 
 3 def deco(func):
 4     @wraps(func) #加在最内层函数正上方
 5     def wrapper(*args,**kwargs):
 6         return func(*args,**kwargs)
 7     return wrapper
 8 
 9 @deco
10 def index():
11     ‘‘‘哈哈哈哈‘‘‘
12     print(from index)
13 
14 print(index.__doc__)    #查看函数注释
15 print(index.__name__)   #查看函数名
16 
17 装饰器——wraps demo

 

以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象学习之八,装饰器

thymeleaf 片段渲染后重新加载 javascript

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码