Je souhaite 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 de préférence aussi dans Spyder et d'autres IDE Python.
J'ai essayé plusieurs options et n'en ai trouvé qu'une qui fonctionne, mais c'est encombrant.
Supposons 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>
:
- : func: `foo`
- : func: `self.foo`
- : func: `MyClass.foo`
- : func: `mymodule.MyClass.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.
python
python-sphinx
spyder
saroele
la source
la source
hyperlink
parlink
pour éviter toute confusion.bar
qui donnera l'information "la fonction ou la méthode que vous recherchez est foo" ?mymodule.MyClass.foo()
etfoo()
? Et qu'est-ce que vous appelez «affichage» ? Est-ce l'affichage d'une chaîne? Ou voulez-vous qu'un objet soit retourné? Dans ce dernier cas, les paens à la finmymodule.MyClass.foo()
etfoo()
sont trop.mymodule.MyClass.foo
abouti au lien ayant les parenthèses. Et j'ai reformulé légèrement la question à nouveau.Réponses:
La solution qui fonctionne pour Sphinx est de préfixer la référence avec
~
.Selon la documentation Sphinx sur la syntaxe des références croisées ,
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()
etfoo()
est un lien.Cependant, notez que cela peut ne pas s'afficher dans Spyder sous forme de lien.
la source
:any:
rôle - voir la note surdefault_setting
.:func:
ça, j'ai trouvé que ça devait l'être:meth:
.Si vous souhaitez spécifier manuellement le texte du lien, vous pouvez utiliser:
Pour plus d'informations, consultez la rubrique Références croisées d'objets Python .
la source
~
est plus proche de ce dont j'ai besoin. J'ai mis cela dans une réponse distincte. Cela ne fonctionne toujours pas dans Spyder cependant ...Il me semble que vous n'avez qu'à ajouter
__name__
ou__doc__
à votre expression pour obtenir ce que vous voulez.Je ne suis toujours pas sûr d'avoir bien compris l'objectif
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__
résultat
<unbound method MyClass.foo> foo I am the docstring of foo <function foo at 0x011C27B0> foo I am the docstring of foo
la source