web-dev-qa-db-de.com

Link zur Klassenmethode in python docstring

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 IDE's 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 die folgenden Optionen für <link to foo> Ausprobiert:

  • : func: `foo`
  • : func: `self.foo`
  • : func: `MyClass.foo`
  • : func: `mymodule.MyClass.foo`

Das einzige, das effektiv einen Link erzeugt, ist: func: `mymodule.MyClass.foo`, aber der Link wird als mymodule.MyClass.foo() angezeigt und ich möchte einen Link, der als foo() oder angezeigt wird foo.
Keine der oben genannten Optionen stellt in Spyder einen Link her.

Danke für Ihre Hilfe.

62
saroele

Die Lösung, die für Sphinx funktioniert, besteht darin, der Referenz das Präfix ~ Voranzustellen.

Gemäß der Sphinx-Dokumentation zu Querverweissyntax ,

Wenn Sie dem Inhalt das Präfix ~ voranstellen, ist der Linktext nur die letzte Komponente des Ziels. Beispiel: py: meth: ~Queue.Queue.get Bezieht sich auf Queue.Queue.get, zeigt jedoch nur get als Linktext an.

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() und foo() ist ein Link.

Beachten Sie jedoch, dass dies in Spyder möglicherweise nicht als Link angezeigt wird.

63
saroele

Wenn Sie den Text des Links manuell angeben möchten, können Sie Folgendes verwenden:

:func:`my text <mymodule.MyClass.foo>`

Weitere Informationen finden Sie unter checkout Querverweise Python objects .

29
devin_s