war*_*iuc 5 python python-decorators
我一直用functools.wraps与我的装饰器一起使用,但今天我问自己为什么?
def requires_auth(function):\n\n @functools.wraps(function)\n def wrapper(request, *args, **kwargs):\n ...\n return function(request, *args, **kwargs)\n\n return wrapper\nRun Code Online (Sandbox Code Playgroud)\n\n这个博客说:
\n\n\n\n\n由于装饰器只是一个包装原始函数的函数,因此它会将
\nfunction.__name__属性替换为它\xe2\x80\x99自己的名称,这可能会在调试代码和(或)在某些特定情况下使用内省(inspect/traceback模块等)时导致一些误解状况)。
因此functools.wraps有助于复制包装函数的 , ,但我的问题是谁需要它__name__?__doc__
这个答案说:
\n\n\n\n\n如果使用装饰器总是意味着丢失有关函数的信息,那么这将是一个严重的问题。
\n
但这是一个“严重的问题”吗?
\n\n该页面说:
\n\n\n\n\n最后一点要记住的是,尝试检查
\n__name__和__doc__将从包装器获取这些值。这可能会使文档生成工具或依赖此信息的其他类型的代码变得混乱。
好的,这是一个正确的观点,但是这是一个关键问题吗?
\n\n我宁愿不使用,functools.wraps因为我使用了pdb很多,如果我获得一个函数的属性与其他函数的属性,它会使调试变得更加困难。
显式的比隐式的好。
\n\n我发现的所有支持始终使用的信息functools.wraps看起来并不令人信服。我错过了什么吗?