6

cython を と一緒に使用すると-Xembedsignature=True、次の形式で docstring に署名が生成される場合があります。

 |  mymethod(...)
 |      MyCythonModule.mymethod(self, param1, MyCythonType param2, param3=None) -> SomeResultType

autodoc 拡張機能を使用してこのための Sphinx ドキュメントを生成すると、次のような出力が得られます。

mymethod(self, param1, MyCythonType param2, param3=None) → SomeResultType

問題は、MyCythonType も SomeResultType も HTML ドキュメント内のハイパーリンクではないことです。

Sphinx は、ドキュメンテーション開発者が「autodoc-process-signature」イベントにフックする可能性を提供します。これにより、その場で署名を操作できます。(signature, return_annotation)メソッドはタプルを返す必要があります。return_annotation の結果を変更して `SomeResultType` や :class:SomeResultType などを挿入する場合、単純にフォーマットされず、リンクなしで、文字列に追加/先頭に追加されたものがそのまま HTML ドキュメントに表示されます。

Pythonにはそのようなものがないため、型付きパラメーターを無視する必要があるかもしれないことがわかりますが、戻り値の型のクラスドキュメントへのハイパーリンクを取得することは可能でなければなりませんが、アイデアがありません.

小さなテストケースを書いた後、これは Cython だけでなく Python にも影響するようです:

class Foo(object):
        def __init__(self):
                pass

        def get_bar(self):
                """
                get_bar(self) -> Bar     <- here you see 'Bar', it will not
                                            become a hyperlink, not even if
                                            enclosed in ``

                Get `Bar` from foo       <- here you see Bar again, it will
                                            become a hyperlink

                :returns: the bar
                """
                return Bar()

class Bar(object):
        def __init__(self):
                pass
4

1 に答える 1

0

代わりに:returns: the bar試してみてください:class:`Bar`

したがって、次のようになります。

class Foo(object):
    def __init__(self):
            pass

    def get_bar(self):
            '''Get :class:`Bar` from :class:`Foo`

            :returns: the :class:`Bar`
            '''
            return Bar()


class Bar(object):
    def __init__(self):
            pass
于 2013-10-16T09:58:47.890 に答える