装饰器:将变量从最深层传递到顶层装饰器

时间:2014-03-10 13:17:36

标签: python runtime decorator on-the-fly

我正面临一个奇怪的问题,我请求你的帮助。以下是详细信息: -

在理解装饰器并将其应用于我的工作时,我有这样的场景: -

def f3(funcA, **kw): ## Decorates f2 and acts like a prerequisite for f2 to work   
    ## code to setup pre-conditions ##   
    requestObj = GetRequestObj()
    kw['requestObj']=requestObj  
    def inner(funcB, **k):
        k.update(kw)
        ## do something ##
        return funcA(funcB, **k)   
    return inner



def f2(func, **kw): # decorates f1 and acts like a prerequisite for f1 to work
    kw['serverObject']=kw['requestObj'].GetServerObject()
    def inner(**k):
       k.update(kw)
       return func(**k)
    return inner

f2=f3(f2)

def f1(**kw):   
   ##Do something on the requestObj and serverObj in kw

f1=f2(f1)

在这里,我知道f1和f2将是装饰函数。而且,事情一直在发挥作用。 现在,我要求在function f3中,我应该根据一个参数调用code to setup pre-conditions,该参数应该通过来自f1的调用传递,即f1决定是否f3中的code to setup pre-conditions是否运行。 PS:我需要致电f1,如:f1(setup_pre_conditions=True)

我的解决方案: 我可以考虑将所有这些函数放在一个类中,并动态设置flag变量到TrueFalse并使用f3中的标志变量来决定是否{应该调用{1}}。但是,使用这种方法,我每次都必须创建这个类的新对象。


修改 我只是想到了另一个解决方案。如果它是正确的,你可以指导我!

让我们将所有代码放在内部函数中,这样它们就可以完全控制从链接装饰器的顶层到最低层


我有更好的方法吗?

0 个答案:

没有答案