相关疑难解决方法(0)

functools.wraps有什么作用?

对另一个问题的答案的评论中,有人说他们不确定functools.wraps在做什么.所以,我问这个问题,以便在StackOverflow上有一个记录,供将来参考:究竟functools.wraps做了什么?

python decorator functools

588
推荐指数
6
解决办法
12万
查看次数

使用functools.wraps修饰的函数使用包装器的名称引发TypeError.为什么?怎么避免?

def decorated(f):
    @functools.wraps(f)
    def wrapper():
        return f()
    return wrapper

@decorated
def g():
    pass
Run Code Online (Sandbox Code Playgroud)

functools.wraps它的工作是保留以下名称g:

>>> g.__name__
'g'
Run Code Online (Sandbox Code Playgroud)

但是如果我传递一个参数g,我得到一个TypeError包含包装器的名称:

>>> g(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: wrapper() takes no arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

这个名字来自哪里?它保存在哪里?有没有办法使异常看起来像g() takes no arguments

python decorator functools python-decorators

11
推荐指数
1
解决办法
315
查看次数

标签 统计

decorator ×2

functools ×2

python ×2

python-decorators ×1