5

docstringの繰り返しコンテンツを処理するための良い方法は何ですか?「標準」引数を取る関数がたくさんありますが、これはdocstringで説明する必要がありますが、docstringの関連部分を一度だけ記述すると、保守と更新がはるかに簡単になります。私は素朴に次のことを試みました:

arg_a = "a: a very common argument"

def test(a):
    '''
    Arguments:
    %s
    ''' % arg_a
    pass

しかし、これは機能しません。なぜなら、私がそうするhelp(test)と、docstringが表示されないからです。これを行う良い方法はありますか?

4

4 に答える 4

6

__doc__他の答えが言うように、関数オブジェクトのメンバーを変更する必要があります。これを行う良い方法は、docstringでフォーマットを実行するデコレータを使用することです。

def fixdocstring(func):
    func.__doc__ = func.__doc__.replace('<arg_a>', 'a: a very common argument')
    #(This is just an example, other string formatting methods can be used as well.)
    return func

@fixdocstring
def test(a):
    '''
    Arguments:
    <arg_a>
    ''''
    pass
于 2010-04-04T21:41:21.717 に答える
4

__doc__ほとんどのユーザー定義タイプに割り当てることができます。

arg_a = "a: a very common argument"

def test(a):
    pass

test.__doc__ = '''
    Arguments:
    %s
    ''' % arg_a
于 2010-04-04T21:35:29.090 に答える
2

私の知る限り、これを行う明確な方法はありません(少なくとも__doc__、Ignacioが示唆するように明示的に再割り当てしない限り)。

しかし、これはひどいことだと思います。このことを考慮:

コードをナビゲートして、ファイルの300行目にあるこのdocstringを読んでいる場合はどうなりますか?あなたは本当に私に議論を探しに行って欲しいですか?

于 2010-04-04T21:36:49.047 に答える
0

十分に文書化された docrepパッケージは、あなたが探しているものかもしれません。

これは、 interjayが提案したように、デコレータに基づいていますが、コード内で再利用されたdocstringの依存関係をインテリジェントに文書化します。これは、ChritopheDによって提起された問題に対処します。実際に実装を見ている人は、コードを掘り下げるときに引数の実際の定義を検索する必要があります。

于 2020-12-26T21:33:34.500 に答える