Skip to main content
 首页 » 编程设计

python之有没有办法将变量传递给装饰器

2025年05月04日19zhoujg

我有基于 OpenID 提供程序的登录系统,我想创建像 @login_required 这样的装饰器。但我有一个问题——我需要检查每个对象的权限。我将 id 传递给我的 View ,所以我想知道是否有任何方法可以将它传递给装饰器,或者这是不可能的,我需要在我的 View 中检查用户权限。

请您参考如下方法:

def outer(var1, var2): 
    def inner(func) 
        func.foo = var1 
        func.bar = var2 
        return func 
    return inner 
 
@outer(myvar1, myvar2) 
def myfunc(): 
    # whatever 
    pass 

虽然您不能将变量直接传递给修饰函数的函数,但您可以创建另一个函数(outer),调用时返回>装饰功能(内部)。您传递 outer 函数变量,它们可用于 inner 函数。这称为闭包。