Подтвердить что ты не робот

Ссылка на метод класса в docstring python

Я хочу добавить ссылку на метод в моем классе изнутри docstring другого метода того же класса. Я хочу, чтобы ссылка работала в сфинксе и преимущественно в Spyder и других IDE на Python.

Я попробовал несколько вариантов и нашел только один, который работает, но он громоздкий.

Предположим, что следующая структура в 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.

Спасибо за вашу помощь.

4b9b3361

Ответ 1

Решение, которое работает для 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 как ссылка.

Ответ 2

Если вы хотите вручную указать текст ссылки, которую вы можете использовать:

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

За дополнительной информацией обращайтесь Перекрестные ссылки на объекты Python.

Ответ 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