custom_decorator
自定义装饰器
1 写一个简单的装饰器
def foo():
print 'foo'
foo #表示是函数
foo() #表示执行 foo 函数1.1 一个普通的装饰器
装饰器
import functools
def log(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print('call %s():' % func.__name__)
print('args = {}'.format(*args))
return func(*args, **kwargs)
return wrapper这样就定义了一个打印出方法名及其参数的装饰器。
使用
备注
1.2 带参数的装饰器
等同于
1.3 类装饰器
在 python 中我们可以利用一个函数作为装饰器来装饰另一个函数,但是装饰器只能是函数吗 ? 当然了我们还可以使用类来作为装饰器!
这个的输出结果是:
其中 butterfly 中的 handler 都是被 protocol_json.Protocol 装饰
2 装饰器的本质
2.1 本质
即
变为了
2.2 装饰器加强库
decorator.py 和 wrapt 两个库是装饰器加强库,可以很方便的定义和使用装饰器函数,wrapt 比 decorator.py 功能更强些
使用 wrapt 库可以相当于对返回新函数的这块进行了封装,用户只需要实现 newfunc 的功能即可,即
原方式
现方式
3 wrapt
3.1 不带参数的装饰器
上面的功能相当于如下功能:
3.2 带参数的装饰器
4 handler 装饰器例子
5 传送门
Python 中使用装饰器时需要注意的一些问题 ------------ 从这个里面发现了 wrapt 这个神器
Last updated