链接到 Python 文档字符串中的类方法

问题描述 投票:0回答:3

我想从同一类的另一个方法的文档字符串中添加指向我的类中的方法的链接。我希望该链接能够在 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 中生成链接。

python spyder python-sphinx cross-reference
3个回答
151
投票

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


59
投票

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

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

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


-9
投票

在我看来,你只需在表达式中添加

__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
© www.soinside.com 2019 - 2024. All rights reserved.