11

次のようなモジュールがあります。

#!/usr/bin/env python

#: Documentation here.
#: blah blah blah
foobar = r'Some really long regex here.'

def myfunc(val=foobar):
    '''Blah blah blah'''
    pass

...そして、次の.rstようなファイルがあります。

:mod:`my_module` Module
-----------------------

..automodule:: my_module
    :members:
    :private-members:
    :show-inheritance:

ドキュメントをビルドすると、次のようなスニペットを含む html ファイルが得られます。

mymodule.foobar. foob​​ar = 'とてつもなく長く醜い正規表現がここにある'

追加のドキュメントはこちら

私のモジュール。myfunc ( val='とてつもなく長く醜い正規表現がここにある' )

何とか何とか何とか

このstackoverflowの投稿に基づいて、モジュールを次のように変更することで変更できると思いました:

#!/usr/bin/env python

#: .. data:: my_module.foobar
#: Extra documentation here
foobar = 'Some really long regex here.'

def myfunc(val=foobar):
    '''.. function:: my_module.myfunc(val=foobar)

    Blah blah blah'''
    pass

...しかし、それはうまくいきませんでした。体の一部として、醜いものの下に必要な署名を追加しただけです。これを適切にオーバーライドする方法を誰かが知っていますか?

(私はSphinx v1.1.3を使用しています。)

4

1 に答える 1

17

関数のキーワード引数のデフォルト値として使用されるモジュールレベルの変数があります。Sphinxは、その変数の値(名前ではなく)を関数シグネチャに表示します。この問題は別の質問で議論されており、OPはそれについてGitHubで発行チケットも提出しています。

ただし、これは2つの方法で回避できます。

  1. リンクされた質問への回答autofunctionで説明されているように、を使用して.rstファイルの署名を上書きします。

  2. docstringの最初の行が署名のように見え、autodoc_docstring_signature構成変数がTrue(デフォルトでは)に設定されている場合、Sphinxはその行を署名として使用します。

    したがって、次のようなdocstringがある場合は、

    def myfunc(val=foobar):
        '''myfunc(val=foobar)
    
        Blah blah blah'''
        pass
    

    希望どおりに機能するはずです。

    質問では、docstringに次の最初の行があります。

    .. function:: my_module.myfunc(val=foobar) 
    

    適切な署名のように見えないため、これは機能しません。

于 2012-08-23T08:34:53.863 に答える