2012-07-26 103 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