小编vik*_*ngr的帖子

签名更改装饰器:正确记录附加参数

假设我有一个自定义装饰器,我希望它能够正确处理装饰函数的文档字符串。问题是:我的装饰器添加了一个参数。

from functools import wraps

def custom_decorator(f):
    @wraps(f)
    def wrapper(arg, need_to_do_more):
        '''
        :param need_to_do_more: if True: do more
        '''
        args = do_something(arg)

        if need_to_do_more:
            args = do_more(args)

        return f(args)

    return wrapper
Run Code Online (Sandbox Code Playgroud)

您可以看到参数实际上并未传递给装饰函数,而是由包装器使用 - 这在这里可能相关,也可能不相关。

如何正确处理记录附加参数?包装器接受额外的参数是一个好习惯,还是我应该避免它?

或者我应该使用不同的解决方案,例如:

  • 使包装器成为一个简单的高阶函数,它调用的函数作为第三个参数传递
  • 将包装器重构为两个独立的函数?

python python-decorators

5
推荐指数
1
解决办法
1398
查看次数

标签 统计

python ×1

python-decorators ×1