使用另一个装饰器包装Python装饰器

3

我在Django代码库中频繁使用以下通用的装饰器调用:

@override_settings(
    CACHES={
        **settings.CACHES,
        "default": generate_cache("default", dummy=False),
        "throttling": generate_cache("throttling", dummy=False),
    }
)
def test_something():
    ...

装饰器代码太冗长了,我希望将这段代码封装成一个新的装饰器@use_real_cache,这样测试函数看起来会更清晰:

@use_real_cache
def test_something():
    ...

我该如何使用另一个装饰器包裹装饰器?

1个回答

5

只需将其赋给一个值:

<strong>use_real_cache</strong> = override_settings(
    CACHES={
        **settings.CACHES,
        'default': generate_cache('default', dummy=False),
        'throttling': generate_cache('throttling', dummy=False),
    }
)

# …

<strong>@use_real_cache</strong>
def test_something():
    # …
    pass

这基本上就是问题中第一个代码示例所发生的事情,只是您没有将其分配给(显式的)变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接