Я хочу добавить ссылку на метод в моем классе из строки документации другого метода того же класса. Я хочу, чтобы ссылка работала в sphinx и предпочтительно также в 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.
Спасибо за вашу помощь.
python
python-sphinx
spyder
сароэле
источник
источник
hyperlink
на,link
чтобы избежать путаницы.bar
, которая даст информацию «функция или метод, который вы ищете, - это foo» ?mymodule.MyClass.foo()
иfoo()
? А что вы называете «дисплеем» ? Это отображение строки? Или вы хотите вернуть объект? В этом последнем случае paens в концеmymodule.MyClass.foo()
иfoo()
слишком много.mymodule.MyClass.foo
привело к тому, что ссылка была заключена в круглые скобки. И я еще раз немного перефразировал вопрос.Ответы:
Решение, которое работает для Sphinx, - это добавить к ссылке префикс
~
.Согласно документации Sphinx по синтаксису перекрестных ссылок ,
Итак, ответ:
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 как ссылка.
источник
:any:
ролью - см. Примечание оdefault_setting
.:func:
я обнаружил, что это должно быть:meth:
.Если вы хотите вручную указать текст ссылки, вы можете использовать:
Для получения дополнительной информации см. Перекрестные ссылки на объекты Python .
источник
~
ближе к тому, что мне нужно. Я выделил это в отдельном ответе. Однако в Spyder это все еще не работает ...Мне кажется, что вам просто нужно добавить
__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
источник