链接到python docstring中的类方法

时间:2014-01-22 17:29:18

标签: 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'

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

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

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:54)

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

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

这导致html看起来像这样:This method does the same as foo()foo()是一个链接。

然而,在Spyder中,它仍然无法作为链接。

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

答案 1 :(得分:28)

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

:func:`my text <mymodule.MyClass.foo>`

有关详细信息,请结帐Cross-referencing Python objects

答案 2 :(得分:-3)

在我看来,您只需在表达式中添加__name____doc__即可获得所需内容。
我仍然不确定是否正确理解了目标

class MyClass():
    def foo(self):
        """I am the docstring of foo"""
        print 'foo'
    def bar(self):
        """This method does the same as <link to foo>"""
        print 'foo'

print
print MyClass.foo
print MyClass.foo.__name__
print MyClass.foo.__doc__
print
print MyClass.__dict__['foo']
print MyClass.__dict__['foo'].__name__
print MyClass.__dict__['foo'].__doc__

结果

<unbound method MyClass.foo>
foo
I am the docstring of foo

<function foo at 0x011C27B0>
foo
I am the docstring of foo