链接到python docstring中的类方法


87

我想从同一个类的另一个方法的文档字符串中添加指向我的类中的方法的链接。我希望链接在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()或的链接foo
上面的选项均未在Spyder中生成链接。

谢谢你的帮助。


什么意思是“从内部添加...”?链接和超链接有什么区别?
eyquem 2014年

为了避免混乱,我改用hyperlinklink
saroele 2014年

我仍然不太明白你的问题。您是否要从Sphinx或Spyder或其他Python IDE中执行对函数docstring的询问,该询问bar将给出信息“您搜索的函数或方法为foo”
eyquem 2014年

其次,您mymodule.MyClass.foo()和之间有什么区别foo()?您怎么称呼“显示”?是显示字符串吗?还是要返回一个对象?在后一种情况下,pain的结尾mymodule.MyClass.foo()foo()太多。
eyquem 2014年

很抱歉造成混淆,始终很难简明地解释一个问题。我只想有一个可以单击的链接,它将带您到foo()的文档字符串(在IDE的文档窗口或Sphinx的html版本中)。关于括号:它们是正确的::func:mymodule.MyClass.foo导致链接带有括号。我再次略过了这个问题。
saroele 2014年

Answers:


88

适用于Sphinx的解决方案是在引用前面加上~

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


15
这里是Spyder开发人员)@saroele我计划在将来改善这种情况。我完全同意拥有它真的很酷;)
卡洛斯·科尔多瓦

真是太好了,期待它。感谢您在Spyder上所做的所有工作!
saroele 2014年

您可以使用:any:角色来做-请参阅有关的注释default_setting
naught101

1
是否可以在不使用完整模块路径的情况下进行交叉引用?
乔纳森

2
相反:func:,我发现它一定是:meth:
Leo Fang

37

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

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

有关更多信息,请签出交叉引用Python对象


这行得通,谢谢。通过查看链接,我发现给引用加上前缀~更接近我的需要。我将其单独回答。它仍然无法在Spyder中工作……
saroele 2014年

-4

在我看来,您只需添加__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

1
我认为您错过了问题的重点:我想在Sphinx构建的文档的html中有一个链接(超链接)。
saroele 2014年

您说得对,我没说清楚。那是因为我不认识狮身人面像。所以我尝试安装Sphinx。但是我没有成功。我在Windows上,并且尝试按照文档中的说明使用sphinx-quickstart。但是我认为我对安装过程有误解。对不起,我不能帮你。我不知道在狮身人面像的背景下,“超链接”应该引起什么注意。
eyquem 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.