链接到python docstring中的类方法

sar*_*ele 64 python python-sphinx spyder

我想从同一个类的另一个方法的docstring中添加一个到我的类中的方法的链接.我希望链接在sphinx中工作,并且优先在Spyder和其他Python IDE中工作.

我尝试了几个选项,发现只有一个可行,但它很麻烦.

假设以下结构 mymodule.py

def class MyClass():
    def foo(self):
        print 'foo'
    def bar(self):
        """This method does the same as <link to foo>"""
        print 'foo'
Run Code Online (Sandbox Code Playgroud)

我尝试了以下选项<link to foo>:

  • :FUNC:`foo`
  • :FUNC:`self.foo`
  • :FUNC:`MyClass.foo`
  • :FUNC:`mymodule.MyClass.foo`

有效生成链接的唯一一个是:func:`mymodule.MyClass.foo`,但链接显示为mymodule.MyClass.foo(),我想要一个显示为foo()或的链接foo.
上述选项均未在Spyder中生成链接.

谢谢你的帮助.

sar*_*ele 69

适用于Sphinx的解决方案是在引用前加上~.所以答案是:

class MyClass():
    def foo(self):
        print 'foo'
    def bar(self):
        """This method does the same as :func:`~mymodule.MyClass.foo`"""
        print 'foo'
Run Code Online (Sandbox Code Playgroud)

这导致html看起来像这样:~Queue.Queue.get,并且 This method does the same as foo()是一个链接.

但是,在Spyder中它仍然不能作为链接.

感谢@devin_s指出我在Sphinx文档中的正确部分:https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing-python-objects

  • (*Spyder dev here*)@saroele我计划将来改善这种情况.我完全同意拥有它真的很酷;) (14认同)
  • 我发现它必须是“:meth:”,而不是“:func:”。 (4认同)
  • 是否可以在不使用完整模块路径的情况下进行交叉引用? (2认同)

dev*_*n_s 31

如果要手动指定可以使用的链接文本:

:func:`my text <mymodule.MyClass.foo>`
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请结帐交叉引用Python对象.