1

プロジェクトの文書化にsphinxを使用していますが、デコレータにラップされた関数に問題があります。同様の質問が寄せられているのを見たことがありますが、私の問題に合った解決策はないようです

パラメータを受け入れることができるカスタムデコレータにすべてラップされた何百もの関数があります

from functools import wraps

def CustomFunctionDecorator(id, name):
    """Custom decorator"""
    def outer(f):

        @wraps(f)
        def inner(*args, **kwargs):
            ...do stuff....
            f(*args, **kwargs)

        return inner

    return outer

私の関数は次のようになります

@CustomFunctionDecorator(123, 'Test')
def TestFunction(a, b, c=None):
    """Test Documentation"""
    ..do something....

sphinx と autodoc を使用してドキュメントを生成すると、CustomFunctionDecorator にラップされたすべての関数が sphinx ドキュメントの関数の実際の引数を隠し、このように表示されます。

TestFunction(*args, **kwargs)

テスト ドキュメント

ドキュメントは機能しますが、関数のパラメーターは機能しません....

何か案は?私が自分自身を明確にしたことを願っています

4

1 に答える 1

1

この答えごと:

functools.wraps__name____doc__、およびのみが保持され__module__ます。署名を保持するには、Michele Simionato のDecorator モジュールを参照してください。

これは修正ではなく回避策ですが、ドキュメント(強調は私のもの) によると:

明示的に文書化された呼び出し可能オブジェクト (関数、メソッド、クラス) の署名を、イントロスペクションから取得した署名をオーバーライドする通常の構文でオーバーライドすることができます。

.. autoclass:: Noodle(type)

   .. automethod:: eat(persona)  

これは、メソッドのシグネチャがデコレーターによって隠されている場合に役立ちます。

バージョン 0.4 で追加。

明らかに、それは「何百もの関数」にとって楽しいものではありません...

于 2014-08-03T08:50:56.493 に答える