Python可以让函数看到自己的装饰器

2024-06-16 15:46:57 发布

您现在位置: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)

Tags: to函数env脚本taskisdef装饰
2条回答

不,函数不知道从哪里调用它,也不知道谁持有对它的引用。你知道吗

您最多可以访问父调用框架(使用sys._getframe(1)),但这不一定是一个装饰器。你知道吗

通常,如果您的函数需要从调用帧访问一个值,最好只传入它。例如,让roles修饰符用一个额外的参数调用包装函数。你知道吗

这是可行的,至少在CPython,但肮脏。你可以检查堆栈跟踪,获取它的局部变量,找出这个对象到底是什么,等等

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

显式优于隐式—这是python的基本概念之一。你知道吗

相关问题 更多 >