2016-01-18 4 views
7

Die Sphinx-Dokumentation auf http://www.sphinx-doc.org/en/stable/domains.html#cross-referencing-python-objects sagt,Was ist der Unterschied im Verhalten zwischen: func: und: meth: Rollen in Python Sphinx?

: py: func: Referenz eine Python-Funktion; Gepunktete Namen können verwendet werden. Der Rollentext muss keine abschließenden Klammern enthalten, um die Lesbarkeit zu verbessern. Sie werden automatisch von Sphinx hinzugefügt, wenn der Config-Wert add_function_parentheses True ist (der Standardwert).

: py: meth: Referenzieren Sie eine Methode eines Objekts. Der Rollestext kann den Typnamen und den Methodennamen enthalten; Wenn es in der Beschreibung eines Typs auftritt, kann der Typname weggelassen werden. Ein gepunkteter Name kann verwendet werden.

Aber ich konnte keinen Unterschied in der Art finden, wie sie sich verhalten.

Hier ist mein Python-Modul, für das ich Dokumentation generiert habe.

"""foo module.""" 

def hello(name): 
    """Print hello addressed to *name*. 

    Args: 
     name (str): Name to address. 
    """ 
    print('hello', name) 

class Foo: 

    """Foo class.""" 

    def bye(self, name): 
     """Print bye addressed to *name*. 

     Args: 
      name (str): Name to address. 
     """ 
     print('bye', name) 

if __name__ == '__main__': 
    hello('world') 
    Foo().bye('python') 

Dies ist, was ich in meiner index.rst-Datei haben.

Foo Documentation 
================= 

See :func:`foo.hello` and :func:`foo.Foo.bye`. 

Also, see :meth:`foo.hello` and :meth:`foo.Foo.bye`. 

foo module 
========== 
.. automodule:: foo 
    :members: 

Nach der Durchführung einer make html ist dies die Ausgabe, die ich sehe.

Screeshot of foo documentation

Beiden :func: und :meth: Rollen haben erzeugen gültige Querverweise Hyperlinks zu helloFoo.bye und unabhängig davon, ob das Ziel eine Funktion oder ein Verfahren ist.

Was ist dann der Unterschied zwischen :func: und :meth: Rollen. Können Sie ein Beispiel geben, für das sie sich anders verhalten?

Antwort

8

Ich habe mir Sphinx Code angesehen. Der einzige Unterschied, den ich feststellen konnte, ist, dass jede der Rollen HTML-Elemente generiert, deren HTML class den Namen der Rolle enthält, die sie erstellt hat. Zum Beispiel wird das code Element für eine :func: Rolle wie folgt aussehen:

<code class="xref py py-func docutils literal"> 

Während für eine :meth: Rolle, wäre es py-meth statt py-func haben. Der CSS-Stil, der in Sphinx enthalten ist, unterscheidet nicht zwischen py-meth und py-func, aber es wäre möglich, ein Stylesheet zu verwenden, das sie anders formatiert.

Für Tritte habe ich andere Rollen ausprobiert (z. B. class) und haben sie auf Methoden auf Objekte zeigen. Sphinx hatte kein Problem damit, auch wenn es keinen Sinn ergab.

0

Es handelt sich um semantische Informationen, die im generierten Index verwendet werden, um beispielsweise etwas als Funktion oder Methode zu kennzeichnen. Wie Louis bereits erwähnt hat, wäre es möglich, sie über HTML in HTML anders zu stylen.