链接到Python Docstring中的类方法



我想从同一类的另一种方法的docstring中添加一个方法中的方法。我希望链接在狮身人面像中工作,并优先在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()foo。以上所有选项都没有在Spyder中产生链接。

适用于sphinx的解决方案是将参考带有 ~

根据有关交叉引用语法的狮身人面像文档,

如果您将内容与~相结合,则链接文本仅是目标的最后一个组成部分。例如,:py:meth:`~Queue.Queue.get` 将参考Queue.Queue.get,但仅显示get作为链接文本。

所以答案是:

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中显示为链接。

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

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

有关更多信息,请查看交叉引用Python对象。

在我看来,您只需要在表达式中添加 __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

最新更新