sphinx.ext.inheritance_diagram – 包含继承关系图

Added in version 0.6.

这个扩展允许您包含继承图,通过 Graphviz 扩展 渲染.

它添加了这个指令:

.. inheritance-diagram::

该指令有一个或多个参数,每个参数提供一个模块或类名.类名可以是不带限定符的;在这种情况下,它们被认为存在于当前描述的模块中(见 py:module ).

对于每个给定的类,以及每个给定模块中的每个类,将确定其基类.然后,从所有类及其基类生成一个图形,该图形通过graphviz扩展渲染为有向图.

这个指令支持一个名为 parts 的选项,如果给定,必须是一个整数,建议指令在显示名称时保留那么多点分隔的部分(从右到左).例如, parts=1 只会显示类名,而不显示包含它们的模块名.

在 2.0 版本发生变更: The value of for parts can also be negative, indicating how many parts to drop from the left. For example, if all your class names start with lib., you can give :parts: -1 to remove that prefix from the displayed node names.

该指令还支持一个 private-bases 标志选项;如果给定,将包括私有基类(名称以 _ 开头的类).

您可以使用 caption 选项为图表添加标题.

在 1.1 版本发生变更: 添加了 private-bases 选项;以前,所有基类总是包含在内.

在 1.5 版本发生变更: 添加了 caption 选项

它还支持一个 top-classes 选项,该选项需要一个或多个以逗号分隔的类名.如果指定了,这样将停止对指定类名的继承遍历.以下是给定的 Python 模块:

"""
       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

如果您在继承图中指定了一个模块,如下所示:

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

任何作为 top-classes 的祖先的基类,并且也在同一模块中定义,将被渲染为独立的节点.在这个例子中,类A将被渲染为图中的独立节点.这是一个已知问题,因为该扩展在内部的工作方式.

如果您不希望类 A(或其他任何祖先)可见,则只需指定您希望生成图表的类,如下所示:

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

在 1.7 版本发生变更: 添加了 top-classes 选项以限制继承图的范围.

示例

以下是实现该指令的内部 InheritanceDiagram 类的不同继承图.

带有全名:

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

仅显示类名:

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

停止在 sphinx.util.docutils.SphinxDirective (Sphinx中仍然是最高父类)处的图表,并从所有名称中删除公共的最左部分( sphinx ):

.. 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

实现 inheritance-diagram 指令的内部类.

配置

inheritance_graph_attrs

继承图的graphviz图属性字典.

例如:

inheritance_graph_attrs = dict(rankdir="LR", size='"6.0, 8.0"',
                               fontsize=14, ratio='compress')
inheritance_node_attrs

继承图的graphviz节点属性字典.

例如:

inheritance_node_attrs = dict(shape='ellipse', fontsize=14, height=0.75,
                              color='dodgerblue1', style='filled')
inheritance_edge_attrs

一个用于继承图的graphviz边属性字典.

inheritance_alias

允许将类的完全限定名称映射到自定义值(当暴露类的底层路径不合适时特别有用,例如这是一个私有类,不应由用户实例化).

例如:

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