write - Verknüpfung zu Klassenmethode in Python-Docstring




python how to write docstring (2)

Ich möchte einer Methode in meiner Klasse einen Link aus dem Docstring 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.

Nehmen Sie 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() und ich möchte einen Link, der als foo() oder foo angezeigt wird.
Keine der oben genannten Optionen führt zu einer Verknüpfung in Spyder.

Danke für Ihre Hilfe.


Die Lösung, die für Sphinx funktioniert, besteht darin, dem Verweis ~ . Die Antwort lautet also:

def class MyClass():
    def foo(self):
        print 'foo'
    def bar(self):
        """This method does the same as :func:`~mymodule.MyClass.foo`"""
        print 'foo'

Das Ergebnis ist eine HTML- This method does the same as foo() , die folgendermaßen foo() : This method does the same as foo() , und foo() ist ein Link.

In Spyder funktioniert es jedoch immer noch nicht als Link.

Danke an @devin_s, um mich auf den richtigen Abschnitt in der Sphinx-Dokumentation zu verweisen: https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing-python-objects


Es scheint mir, dass Sie einfach __name__ oder __doc__ zu Ihrem Ausdruck hinzufügen __name__ , um das zu erhalten, was Sie möchten.
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




spyder