Eu quero adicionar um link para um método em minha classe de dentro da docstring de outro método da mesma classe. Eu quero que o link funcione no sphinx e preferencialmente também no Spyder e em outros Python IDE.
Tentei várias opções e encontrei apenas uma que funciona, mas é complicado.
Suponha que a seguinte estrutura em mymodule.py
def class MyClass():
def foo(self):
print 'foo'
def bar(self):
"""This method does the same as <link to foo>"""
print 'foo'
Tentei as seguintes opções para <link to foo>
:
- : func: `foo`
- : func: `self.foo`
- : func: `MyClass.foo`
- : func: `mymodule.MyClass.foo`
O único que efetivamente produz um link é: func: `mymodule.MyClass.foo`, mas o link é mostrado como mymodule.MyClass.foo()
e eu quero um link que é mostrado como foo()
ou foo
.
Nenhuma das opções acima produz um link no Spyder.
Obrigado pela ajuda.
python
python-sphinx
spyder
Saroele
fonte
fonte
hyperlink
porlink
para evitar confusão.bar
que fornecerá a informação "a função ou método que você pesquisa é foo" ?mymodule.MyClass.foo()
efoo()
? E o que você chama de "display" ? É a exibição de uma corda? Ou você quer um objeto devolvido? Neste último caso, os paens no final demymodule.MyClass.foo()
efoo()
são demais.mymodule.MyClass.foo
resultou no link tendo parênteses. E eu reformulei a pergunta ligeiramente novamente.Respostas:
A solução que funciona para o Sphinx é prefixar a referência com
~
.De acordo com a documentação do Sphinx sobre a sintaxe de referência cruzada ,
Portanto, a resposta é:
class MyClass(): def foo(self): print 'foo' def bar(self): """This method does the same as :func:`~mymodule.MyClass.foo`""" print 'foo'
Isso resulta em um html parecido com este:
This method does the same as foo()
efoo()
é um link.No entanto, observe que isso pode não ser exibido no Spyder como um link.
fonte
:any:
função - consulte a nota sobredefault_setting
.:func:
, descobri que tinha que ser:meth:
.Se você deseja especificar manualmente o texto do link, pode usar:
Para obter mais informações, consulte Referência cruzada de objetos Python .
fonte
~
está mais perto do que eu preciso. Eu coloquei isso em uma resposta separada. Ainda não funciona no Spyder, no entanto ...Parece-me que basta adicionar
__name__
ou__doc__
à sua expressão para obter o que deseja.Ainda não tenho certeza de ter entendido corretamente o objetivo
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__
resultado
<unbound method MyClass.foo> foo I am the docstring of foo <function foo at 0x011C27B0> foo I am the docstring of foo
fonte