2013-11-20 46 views
2

我对Python仍然很陌生。给定一个具有装饰器的函数,函数是否可以访问它们的正文?Python - 函数是否可以看到它自己的装饰器

(从Fabric脚本)

@task 
@roles('qa-env') 
def deploy_qa(): 
    #----------------------------------------------------------------------- 
    # Is there a way to get access to the @roles decorator as an array here? 
    #----------------------------------------------------------------------- 
    deployer.configureEnv('qa-env') 
    deployer.installApp1() 
    deployer.installApp2(True) 

回答

4

没有,该函数不知道它被称为从人或持有对它的引用。

充其量你可以访问父呼叫帧(与sys._getframe(1)),但这不一定是装饰者。

通常,如果您的函数需要访问调用框架中的值,则最好只传递它。例如,让roles装饰器使用额外参数调用包装函数。

+1

哇!我不知道'sys._getFrame(1)'。很高兴知道。为你+1。 – Chandranshu

2

在CPython中至少是可行的,但是很脏。你可以检查堆栈跟踪,找到它的本地人,找出这个对象到底是什么,等等。

但是,如果你需要这样做,你可能做错了什么,你的解决方案应该改变。

显式优于隐式 - 基本python概念之一。

相关问题