2013-12-16 18 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