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']

functools.update_wrapper()オプションのパラメーターを使用して呼び出しに追加の指示を与える必要があると思いassignedますが、必要な効果を得るためにそのタプルに何を追加するかが正確にはわかりません。

名前とdocstringは新しい関数オブジェクトに正しく転送されますが、引数定義を転送する方法について誰かにアドバイスしてもらえますか?

ありがとう。

4

1 に答える 1

1

ここここでの以前の質問は、デコレータモジュールがこれを実行できることを示唆しています。

于 2012-07-26T19:17:43.370 に答える