Ich möchte einen Link zu einer Methode in meiner Klasse aus der Dokumentzeichenfolge einer anderen Methode derselben Klasse hinzufügen. Ich möchte, dass der Link in Sphinx und vorzugsweise auch in Spyder und anderen Python-IDEs funktioniert.
Ich habe mehrere Optionen ausprobiert und nur eine gefunden, die funktioniert, aber es ist umständlich.
Angenommen, die folgende Struktur in mymodule.py
def class MyClass():
def foo(self):
print 'foo'
def bar(self):
"""This method does the same as <link to foo>"""
print 'foo'
Ich habe folgende Optionen ausprobiert für <link to foo>
:
- : func: `foo`
- : func: `self.foo`
- : func: `MyClass.foo`
- : func: `mymodule.MyClass.foo`
Der einzige, der effektiv einen Link erzeugt, ist: func: `mymodule.MyClass.foo`, aber der Link wird als angezeigt mymodule.MyClass.foo()
und ich möchte einen Link, der als foo()
oder angezeigt wird foo
.
Keine der oben genannten Optionen erzeugt einen Link in Spyder.
Danke für Ihre Hilfe.
python
python-sphinx
spyder
saroele
quelle
quelle
hyperlink
durchlink
um Verwirrung zu vermeiden.bar
, die die Information "Die Funktion oder Methode, nach der Sie suchen, ist foo" liefert ?mymodule.MyClass.foo()
undfoo()
? Und wie nennt man "Anzeige" ? Ist es die Anzeige einer Zeichenfolge? Oder möchten Sie ein Objekt zurückgeben? In diesem letzteren Fall sind die Paens am Endemymodule.MyClass.foo()
undfoo()
zu viel.mymodule.MyClass.foo
führte dazu, dass der Link die Klammern enthielt. Und ich habe die Frage noch einmal leicht umformuliert.Antworten:
Die Lösung, die für Sphinx funktioniert, besteht darin, der Referenz das Präfix zu voranstellen
~
.Per Sphinx Dokumentation über Querverweise Syntax ,
Die Antwort lautet also:
class MyClass(): def foo(self): print 'foo' def bar(self): """This method does the same as :func:`~mymodule.MyClass.foo`""" print 'foo'
Dies führt dazu, dass ein HTML wie folgt aussieht :
This method does the same as foo()
, undfoo()
ist ein Link.Beachten Sie jedoch, dass dies in Spyder möglicherweise nicht als Link angezeigt wird.
quelle
:any:
Rolle tun - siehe den Hinweis zudefault_setting
.:func:
fand ich, dass es sein muss:meth:
.Wenn Sie den Text des Links manuell angeben möchten, können Sie Folgendes verwenden:
Weitere Informationen finden Sie unter Querverweise auf Python-Objekte .
quelle
~
näher an dem liegt, was ich brauche. Ich habe das in einer separaten Antwort angegeben. Es funktioniert jedoch immer noch nicht in Spyder ...Es scheint mir, dass Sie nur
__name__
oder__doc__
zu Ihrem Ausdruck hinzufügen müssen, um zu erhalten, was Sie wollen.Ich bin mir immer noch nicht sicher, ob ich das Ziel richtig verstanden habe
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__
Ergebnis
<unbound method MyClass.foo> foo I am the docstring of foo <function foo at 0x011C27B0> foo I am the docstring of foo
quelle