Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring。
实例一:
不加wraps
1 | #coding=utf-8 |
执行结果:
1 | ('wrapper', 'decorator') |
实例二:
加wraps
1 | #coding=utf-8 |
执行结果:
1 | ('example', 'Docstring') |