2013-11-20 2 views
2

저는 여전히 파이썬을 처음 접했습니다. 데코레이터가있는 함수가 주어지면 함수가 해당 데코레이터에 액세스 할 수 있습니까?파이썬 - 함수가 자체 데코레이터를 볼 수 있습니까?

@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

(A Fabric 스크립트에서) 아니,이 함수가 호출 또는 누구를에 대한 참조를 보유중인 위치를 알 수 없습니다.

부모 호출 프레임 (기껏해야 sys._getframe(1))에 액세스 할 수 있지만 반드시 장식 자일 필요는 없습니다.

일반적으로 함수가 호출 프레임의 값에 액세스해야하는 경우에는 전달하는 것이 가장 좋습니다. 예를 들어 roles 데코레이터가 추가 인수를 사용하여 래핑 된 함수를 호출하게합니다.

+1

와우! 나는'sys._getFrame (1)'에 대해 몰랐다. 잘 알고 있습니다. 너 +1 했어. – Chandranshu

2

적어도 CPython에서는 가능하지만 더러울 수 있습니다. 스택 트레이스를 검사하고, 지역 주민들을 만나고, 정확히이 객체 등이 무엇인지 알아낼 수 있습니다.

그러나 이렇게해야한다면 잘못된 것이고 해결책은 변경되어야합니다.

명시 적 (explicit)은 암시적인 것보다 낫습니다 - 기본적인 파이썬 개념 중 하나입니다.

관련 문제