2012-07-26 94 views
1

我使用的是块这样的:蟒蛇装饰失去参数定义

def served(fn) :  
    def wrapper(*args, **kwargs): 
     p = xmlrpclib.ServerProxy(SERVER, allow_none=True) 
     return (p.__getattr__(fn.__name__)(*args, **kwargs)) # do the function call 
    return functools.update_wrapper(wrapper,fn) 

@served 
def remote_function(a, b): 
    pass 

包裹一系列XML-RPC的调用到一个Python模块。 “服务”装饰器在存根函数上被调用以公开远程服务器上的操作。

我创建了这样的存根,希望能够稍后检查它们以获取有关函数的信息,特别是它的参数。

如上所示,上面的代码不会将参数信息从原始函数传递给包装器。如果我检查inspect.getargspec(remote_function),那么我基本上得到一个空的列表,而不是我期待的args=['a','b']

我猜我需要通过可选的assigned参数给予额外方向的functools.update_wrapper()打电话,但我不知道到底是什么要补充的元组来获得我想要的效果。

名称和文档字符串已正确传输到新的函数对象,但有人可以告诉我如何传递参数定义?

谢谢。

回答

1

以前的问题herehere建议decorator module可以做到这一点。

+0

是的,我没有在我的搜索中找到这些。可惜的是,没有办法用标准模块来做到这一点(特别是functools)。 – 2012-07-26 19:32:37