我对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)
不,函数不知道从哪里调用它,也不知道谁持有对它的引用。你知道吗
您最多可以访问父调用框架(使用
sys._getframe(1)
),但这不一定是一个装饰器。你知道吗通常,如果您的函数需要从调用帧访问一个值,最好只传入它。例如,让
roles
修饰符用一个额外的参数调用包装函数。你知道吗这是可行的,至少在CPython,但肮脏。你可以检查堆栈跟踪,获取它的局部变量,找出这个对象到底是什么,等等
但如果你需要这样做,你可能是做错了什么,你的解决方案应该改变。你知道吗
显式优于隐式—这是python的基本概念之一。你知道吗
相关问题 更多 >
编程相关推荐