sphinx.ext.inheritance_diagram – Vererbungdiagramme einbinden

Hinzugefügt in Version 0.6.

Diese Erweiterung ermöglicht das Einbinden von Vererbungdiagrammen, die über die Graphviz Erweiterung gerendert werden.

Sie fügt diese Direktive hinzu

.. inheritance-diagram::

Diese Direktive hat ein oder mehrere Argumente, die jeweils einen Modul- oder Klassennamen angeben. Klassennamen können unqualified sein; in diesem Fall wird angenommen, dass sie im aktuell beschriebenen Modul existieren (siehe py:module).

Für jede angegebene Klasse und jede Klasse in jedem angegebenen Modul werden die Basisklassen ermittelt. Dann wird aus allen Klassen und ihren Basisklassen ein Graph generiert, der dann über die Graphviz-Erweiterung zu einem gerichteten Graphen gerendert wird.

Diese Direktive unterstützt eine Option namens parts, die, wenn angegeben, eine Ganzzahl sein muss, die die Direktive anweist, so viele Punkt-getrennte Teile in den angezeigten Namen beizubehalten (von rechts nach links). Zum Beispiel wird bei parts=1 nur der Klassenname angezeigt, ohne die Namen der Module, die sie enthalten.

Geändert in Version 2.0: Der Wert für parts kann auch negativ sein und gibt an, wie viele Teile von links entfernt werden sollen. Wenn beispielsweise alle Klassennamen mit lib. beginnen, können Sie :parts: -1 angeben, um dieses Präfix aus den angezeigten Knotennamen zu entfernen.

Die Direktive unterstützt auch eine Flag-Option private-bases; wenn diese angegeben ist, werden private Basisklassen (die, deren Name mit _ beginnt) eingeschlossen.

Sie können die Option caption verwenden, um dem Diagramm eine Bildunterschrift zu geben.

Geändert in Version 1.1: Option private-bases hinzugefügt; zuvor wurden alle Basen immer eingeschlossen.

Geändert in Version 1.5: Option caption hinzugefügt

Sie unterstützt auch eine Option top-classes, die ein oder mehrere durch Kommas getrennte Klassennamen erfordert. Wenn angegeben, stoppt die Vererbungstraversierung bei den angegebenen Klassennamen. Gegeben das folgende Python-Modul

"""
       A
      / \
     B   C
    / \ / \
   E   D   F
"""

class A:
    pass

class B(A):
    pass

class C(A):
    pass

class D(B, C):
    pass

class E(B):
    pass

class F(C):
    pass

Wenn Sie ein Modul im Vererbungdiagramm wie folgt angegeben haben

.. inheritance-diagram:: dummy.test
   :top-classes: dummy.test.B, dummy.test.C

Alle Basisklassen, die Vorfahren von top-classes sind und im selben Modul definiert sind, werden als eigenständige Knoten gerendert. In diesem Beispiel wird Klasse A als eigenständiger Knoten im Graphen gerendert. Dies ist ein bekanntes Problem aufgrund der internen Funktionsweise dieser Erweiterung.

Wenn Sie Klasse A (oder andere Vorfahren) nicht sichtbar haben möchten, geben Sie nur die Klassen an, für die Sie das Diagramm generieren möchten, wie folgt

.. inheritance-diagram:: dummy.test.D dummy.test.E dummy.test.F
   :top-classes: dummy.test.B, dummy.test.C

Geändert in Version 1.7: Option top-classes hinzugefügt, um den Geltungsbereich von Vererbungsgraphen zu begrenzen.

:include-subclasses: (kein Wert)

Hinzugefügt in Version 8.2.

Wenn angegeben, werden alle Unterklassen der Klassen ebenfalls zum Diagramm hinzugefügt.

Gegeben das obige Python-Modul können Sie Ihr Vererbungdiagramm wie folgt angeben

.. inheritance-diagram:: dummy.test.A
   :include-subclasses:

Dies schließt die Klassen A, B, C, D, E und F in das Vererbungdiagramm ein, aber keine anderen Klassen im Modul dummy.test.

Beispiele

Die folgenden sind verschiedene Vererbungdiagramme für die interne Klasse InheritanceDiagram, die die Direktive implementiert.

Mit vollständigen Namen

.. inheritance-diagram:: sphinx.ext.inheritance_diagram.InheritanceDiagram
Inheritance diagram of sphinx.ext.inheritance_diagram.InheritanceDiagram

Nur Klassennamen anzeigen

.. inheritance-diagram:: sphinx.ext.inheritance_diagram.InheritanceDiagram
   :parts: 1
Inheritance diagram of sphinx.ext.inheritance_diagram.InheritanceDiagram

Stoppen des Diagramms bei sphinx.util.docutils.SphinxDirective (der höchsten Oberklasse, die noch Teil von Sphinx ist), und Entfernen des gemeinsamen am weitesten links stehenden Teils (sphinx) aus allen Namen

.. inheritance-diagram:: sphinx.ext.inheritance_diagram.InheritanceDiagram
   :top-classes: sphinx.util.docutils.SphinxDirective
   :parts: -1
Inheritance diagram of sphinx.ext.inheritance_diagram.InheritanceDiagram
class sphinx.ext.inheritance_diagram.InheritanceDiagram

Die interne Klasse, die die Direktive inheritance-diagram implementiert.

Konfiguration

inheritance_graph_attrs
Typ:
dict[str, str | int | float | bool]
Standard:
{}

Ein Wörterbuch von Graphviz-Graphattributen für Vererbungdiagramme.

Zum Beispiel

inheritance_graph_attrs = dict(rankdir="LR", size='"6.0, 8.0"',
                               fontsize=14, ratio='compress')
inheritance_node_attrs
Typ:
dict[str, str | int | float | bool]
Standard:
{}

Ein Wörterbuch von Graphviz-Knotenattributen für Vererbungdiagramme.

Zum Beispiel

inheritance_node_attrs = dict(shape='ellipse', fontsize=14, height=0.75,
                              color='dodgerblue1', style='filled')
inheritance_edge_attrs
Typ:
dict[str, str | int | float | bool]
Standard:
{}

Ein Wörterbuch von Graphviz-Kantenattributen für Vererbungdiagramme.

inheritance_alias
Typ:
dict[str, str]
Standard:
{}

Ermöglicht die Abbildung des vollständigen qualifizierten Namens der Klasse auf benutzerdefinierte Werte (nützlich, wenn die Offenlegung des zugrunde liegenden Pfads einer Klasse unerwünscht ist, z. B. wenn es sich um eine private Klasse handelt und nicht vom Benutzer instanziiert werden sollte).

Zum Beispiel

inheritance_alias = {'_pytest.Magic': 'pytest.Magic'}