2013-12-16 2 views
0

모듈 X에 모든 함수 집합이 있습니다. 모든 입력 집합을 공유합니다. 따라서 식별자를 긴 문자열로 바꾸려면 문자열 서식을 사용하고 싶습니다. 반대로이를 위해, 나는 그런데코레이터에서 대상 함수 모듈 네임 스페이스에 깨끗이 액세스하십시오.

def expanddoc(func): 
    func.__doc__ = func.__doc__.format(**globals() 
    return func 

하지만 **globals()Y의 네임 스페이스를 참조

나는대로 모듈 Y에 정의 된 기능 expanddoc을 가지고
inputs = """Some long string""" 
@expanddoc 
def spam(...): 
    """This is a silly function. 

    {inputs} 
    :returns: Something useless 
    """ 

@expanddoc 
def eggs(...): 
    """This is an even sillier function. 

    {inputs} 
    :returns: Something pointless 
    """ 

, 같은 장식을 사용하고 있습니다 X s 네임 스페이스 func이 정의 된 모듈의 네임 스페이스에 데코레이터 expanddoc에서 깨끗하게 액세스하려면 어떻게해야합니까?

답변

0

질문을 쓰면서 대답을 알아 냈으므로 여기에 게시하기로 결정했습니다. 그러나 누군가 다른 해결책을 가지고 있다면, 그것은 더 안정적이거나 깨끗합니다. 나는 여전히 관심이 있습니다.

사전이 있어야한다 .format에 전달할 :

vars(sys.modules[func.__module__])

0

이 거의 같은 행동해야 :

import X 
def expanddoc(func): 
    func.__doc__ = func.__doc__.format(vars(X)) 
    return func 
+0

그러나이'func'는 모든 모듈에서 오는 될 수있다, 그것은'를 반드시'X'가 아니어야합니다 -'expanddoc'에서 하드 코딩 할 수 없습니다. 아직 모르겠습니다. – gerrit

+0

@gerrit 당신이 옳습니다. – Robert

관련 문제