Python @functools.wraps
随便写一个装饰器:
def pine(func):
def inner(*args, **kwargs):
"""This is inner"""
return func(*args, **kwargs)
return inner
@pine
def apple():
"""This is apple."""
print('This is apple.')
print(apple.__name__)
print(apple.__doc__)
输出:
inner
This is inner
可以看到,加了装饰器的函数其实就变成了另外一个函数了,它的函数名和文档注释都发生了变化。
为了防止这类情况发生,在实现装饰器的之前,加一个@functools.wraps的装饰器
import functools
def pine(func):
@functools.wraps(func)
def inner(*args, **kwargs):
"""This is inner"""
return func(*args, **kwargs)
return inner
@pine
def apple():
"""This is apple."""
print('This is apple.')
print(apple.__name__)
print(apple.__doc__)
输出
apple
This is apple.