functools.wraps的有用性

时间:2015-11-25 15:28:47

标签: python python-decorators

我总是和我的装饰师一起使用functools.wraps,但今天我问自己为什么?

def requires_auth(function):

    @functools.wraps(function)
    def wrapper(request, *args, **kwargs):
        ...
        return function(request, *args, **kwargs)

    return wrapper

This blog说:

  

因为decorator只是一个包装原始函数的函数,所以它会将function.__name__属性替换为它自己的名称,这会在调试代码时产生一些误解,并且(或)使用内省(inspect / traceback模块等在某些条件下)。

所以functools.wraps有助于复制包装函数的__name____doc__,但我的问题是谁需要它?

This answer说:

  

如果使用装饰器总是意味着丢失有关函数的信息,那将是一个严重的问题。

但这是一个“严重的问题”吗?

This page说:

  

要记住的最后一点是,尝试检查包装函数的__name____doc__将从包装器中获取这些值。这可能会破坏文档生成工具或依赖此信息的其他类型的代码。

好的,有效点,但这是一个关键问题吗?

我宁愿不使用functools.wraps,因为我经常使用pdb,如果我获得具有其他函数属性的函数的属性,它可以使调试更难。

明确比隐含更好。

我发现所有使用functools.wraps支持始终的信息看起来并不令人信服。我错过了什么吗?

0 个答案:

没有答案
相关问题