Je veux ajouter un lien vers une méthode de ma classe à partir de la docstring d'une autre méthode de la même classe. Je veux que le lien fonctionne dans sphinx et préférentiellement aussi dans Spyder et autres Python IDE.
J'ai essayé plusieurs options et n'en ai trouvé qu'une seule qui fonctionne, mais c'est encombrant.
Supposons que la structure suivante dans mymodule.py
def class MyClass():
def foo(self):
print 'foo'
def bar(self):
"""This method does the same as <link to foo>"""
print 'foo'
J'ai essayé les options suivantes pour <link to foo>
:
Le seul qui produit effectivement un lien est: func: `mymodule.MyClass.foo`, mais le lien est affiché comme mymodule.MyClass.foo()
et je veux un lien qui est affiché comme foo()
ou foo
.
Aucune des options ci-dessus ne produit de lien dans Spyder.
Merci de votre aide.
La solution qui fonctionne pour Sphinx consiste à préfixer la référence avec ~
.
Selon la documentation Sphinx sur Syntaxe de référence croisée ,
Si vous préfixez le contenu avec ~, le texte du lien ne sera que le dernier composant de la cible. Par exemple,: py: meth:
~Queue.Queue.get
Fera référence à Queue.Queue.get mais affichera seulement get comme texte de lien.
La réponse est donc:
class MyClass():
def foo(self):
print 'foo'
def bar(self):
"""This method does the same as :func:`~mymodule.MyClass.foo`"""
print 'foo'
Il en résulte un html ressemblant à ceci: This method does the same as foo()
et foo()
est un lien.
Cependant, notez que cela peut ne pas s'afficher dans Spyder sous forme de lien.
Si vous souhaitez spécifier manuellement le texte du lien, vous pouvez utiliser:
:func:`my text <mymodule.MyClass.foo>`
Pour plus d'informations, consultez Cross-referencing Python objects .