首页 > 解决方案 > 装饰器分配

问题描述

假设装饰器

@app.callback(
    Output("plot_1", "figure"),
    [Input("checklist", "value"),
     Input("radio", "value")])

这在代码中重复了几次。副本之间的唯一区别是不同的情节名称。

如何将该装饰器分配给另一个装饰器并使用后者?

@new_callback("plot_1")

标签: pythonpython-decorators

解决方案


装饰器语法只是函数应用的捷径;app.callback只是一个功能。创建一个使用固定参数调用它的新函数。

def new_callback(plot):
    return app.callback(
          Output(plot, "figure"),
          [
              Input("checklist", "value"),
              Input("radio", "value")
          ]
    )

app.callback它本身实际上并不是装饰器;它是一个返回装饰器的函数(即,将要装饰的函数作为参数的函数)。

@app.callback(...)
def foo():
    ...

相当于

def foo():
    ...

foo = app.callback(...)(foo)

推荐阅读