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.

posted @ 2022-04-06 15:07  王舰  阅读(198)  评论(0)    收藏  举报