sphinx.ext.inheritance_diagram – Include inheritance diagrams¶
New in version 0.6.
This extension allows you to include inheritance diagrams, rendered via the
Graphviz extension.
It adds this directive:
-
.. inheritance-diagram::¶ This directive has one or more arguments, each giving a module or class name. Class names can be unqualified; in that case they are taken to exist in the currently described module (see
py:module).For each given class, and each class in each given module, the base classes are determined. Then, from all classes and their base classes, a graph is generated which is then rendered via the graphviz extension to a directed graph.
This directive supports an option called
partsthat, if given, must be an integer, advising the directive to remove that many parts of module names from the displayed names. (For example, if all your class names start withlib., you can give:parts: 1to remove that prefix from the displayed node names.)It also supports a
private-basesflag option; if given, private base classes (those whose name starts with_) will be included.You can use
captionoption to give a caption to the diagram.Changed in version 1.1: Added
private-basesoption; previously, all bases were always included.Changed in version 1.5: Added
captionoptionIt also supports a
top-classesoption which requires one or more class names separated by comma. If specified inheritance traversal will stop at the specified class names. Given the following Python module:""" A / \ B C / \ / \ E D F """ class A(object): pass class B(A): pass class C(A): pass class D(B, C): pass class E(B): pass class F(C): passIf you have specified a module in the inheritance diagram like this:
.. inheritance-diagram:: dummy.test :top-classes: dummy.test.B, dummy.test.C
any base classes which are ancestors to
top-classesand are also defined in the same module will be rendered as stand alone nodes. In this example class A will be rendered as stand alone node in the graph. This is a known issue due to how this extension works internally.If you don’t want class A (or any other ancestors) to be visible then specify only the classes you would like to generate the diagram for like this:
.. inheritance-diagram:: dummy.test.D dummy.test.E dummy.test.F :top-classes: dummy.test.B, dummy.test.C
Changed in version 1.7: Added
top-classesoption to limit the scope of inheritance graphs.
New config values are:
-
inheritance_graph_attrs¶ A dictionary of graphviz graph attributes for inheritance diagrams.
For example:
inheritance_graph_attrs = dict(rankdir="LR", size='"6.0, 8.0"', fontsize=14, ratio='compress')
-
inheritance_node_attrs¶ A dictionary of graphviz node attributes for inheritance diagrams.
For example:
inheritance_node_attrs = dict(shape='ellipse', fontsize=14, height=0.75, color='dodgerblue1', style='filled')
-
inheritance_edge_attrs¶ A dictionary of graphviz edge attributes for inheritance diagrams.
-
inheritance_alias¶ Allows mapping the full qualified name of the class to custom values (useful when exposing the underlying path of a class is not desirable, e.g. it’s a private class and should not be instantiated by the user).
For example:
inheritance_alias = {'_pytest.Magic': 'pytest.Magic'}