python装饰器简单学习01
一、什么是装饰器
python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。
二、如何实现装饰器
示例一:![]()
上述例子中通过装饰函数login()函数实现了登录功能,add_to_shopcar这个函数作为参数被传入login函数,从而实现了登录。
示例二:
通过语法糖的方式实现装饰器
由于 @login 完全等价于add_to_shopcar = login(add_to_shopcar),所以在我们执行 login(add_to_shopcar) 之后返回的函数是装饰函数deco_login,而不是add_to_shopcar。但这与装饰器的初衷是相违背的:不改变原函数的情况下,增加函数功能,使用装饰器改变了原函数的元信息.__name__、.__docstring__等信息。

那么如何才能是被装饰函数的元信息不改变呢,在这里我么使用python内置的装饰器 @wraps,
@wraps 的作用:避免装饰器对原函数的元信息进行更改,比如函数的docstring,__name__,等参数列表,格式:@wraps(被装饰函数名称)。使用试试看看
三、带参数的情况
被装饰函数本身带参数,那么在装饰函数的参数必须与被装饰函数保持一致。

原函数多个参数
四、类装饰器
指装饰器本身是一个类,类装饰器需要实现2个方法:__init__、__call__方法。
当类装饰器本身不带任何参数时,__init__:接受被装饰函数、__call__:实现装饰逻辑。

当类装饰器带参数的情况:__init__:接受参数、__call__:接受被装饰参数和实现装饰逻辑,举例如下。

装饰器的高阶用法参考:http://www.360doc.com/content/19/0602/18/40585874_839852693.shtml
记录学习 有错误,感谢斧正。


浙公网安备 33010602011771号