2013-12-16 17 views
0

我有一組模塊X中的功能,都共享一組輸入。因此,我想使用字符串格式來用長字符串替換標識符。對於這一點,我使用的是裝飾,比如,從裝飾者,乾淨地訪問目標功能模塊命名空間

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 
    """ 

在那裏我有功能expanddoc,在模塊Y規定,如,

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

**globals()Y名字空間,而不是到X的命名空間。我如何幹淨地訪問從裝飾器expanddoc中定義的任何模塊func的命名空間?

回答

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