装饰装饰器-Python 3

时间:2020-08-12 07:19:00

标签: python-3.x python-decorators

我试图在装饰函数的装饰器上进行一些参数修改。
原始代码如下:

@original_decorator(arg=some_object)
def calculate(a, b):
  # complex business logic
  raise Exception()

其中original_decorator负责异常处理。

我要实现的是对some_object进行一些临时修改,并在函数返回后恢复其属性。

我尝试了以下

def replace_arg(arg, add_some_property):
    def decorator_wrapper(decorator_func):
        def decorator_inner(*decorator_args, **decorator_kwargs):
            def actual_wrapper(actual_func):
                def actual_inner(*actual_args, **actual_kwargs):
                    original = arg['func']
                    arg['func'] = add_some_property
                    decorator_kwargs['arg'] = arg
                    result = actual_func(*actual_args, **actual_kwargs)
                    arg['func'] = original
                    return result 
                return actual_inner
            return actual_wrapper
        return retry_inner
    return retry_wrapper

还尝试将修改逻辑放在decorator_inner中,但都没有起作用。

我的问题:

  1. 是否可以修改Deorator的论点?
  2. 如果为true,那么我该如何实现?

0 个答案:

没有答案
相关问题