:模式:sphinx.ext.继承图–包括继承关系图
此插件允许包含通过:mod:Graphviz插件呈现的继承关系图<sphinx.ext.graphviz>.
它添加了以下指令:
-
.. inheritance-diagram::
这个指令有一个或多个参数,每个参数都给出一个模块或类名。类名可以是非限定的;在这种情况下,它们被认为存在于当前描述的模块中(参见:rst:方向:py:module)。
对于每个给定的类,以及每个给定模块中的每个类,确定基类。然后,从所有类及其基类生成一个图,然后通过graphviz扩展将其呈现为有向图。
此指令支持一个名为“parts”的选项,如果给定该选项,该选项必须是一个整数,建议该指令在显示的名称中保留这些以点分隔的部分(从右到左)。例如,``parts=1``将只显示类名,而不显示包含类名的模块的名称。
在 2.0 版本发生变更: for“parts”的值也可以是负数,表示从左边删除多少个部分。例如,如果所有类名都以“lib.”开头,则可以给“`:parts:-1”从显示的节点名中删除该前缀。
该指令还支持一个“private bases”标志选项;如果给定了该选项,则将包括私有基类(名称以“`”开头的基类)。
您可以使用“caption”选项为图表提供标题。
在 1.1 版本发生变更: 添加了“private bases”选项;以前,总是包含所有的基。
在 1.5 版本发生变更: 添加了“caption”选项
它还支持“顶级类”选项,该选项需要一个或多个用逗号分隔的类名。如果指定继承,则遍历将在指定的类名处停止。给定以下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
作为“顶级类”的祖先并在同一模块中定义的任何基类都将呈现为独立节点。在本例中,类A将在图中呈现为独立节点。这是一个已知的问题,因为这个扩展是如何在内部工作的。
如果不希望类A(或任何其他祖先)可见,则只指定要为其生成关系图的类,如下所示:
.. inheritance-diagram:: dummy.test.D dummy.test.E dummy.test.F
:top-classes: dummy.test.B, dummy.test.C
在 1.7 版本发生变更: 添加了“顶级类”选项以限制继承图的范围。
实际案例
以下是实现指令的内部“InheritanceDiagram”类的不同继承关系图。
全名:
.. inheritance-diagram:: sphinx.ext.inheritance_diagram.InheritanceDiagram
digraph inheritance02ef59160f {
bgcolor=transparent;
rankdir=LR;
size="8.0, 12.0";
"docutils.parsers.rst.Directive" [URL="../../extdev/markupapi.html#docutils.parsers.rst.Directive",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Base class for reStructuredText directives."];
"sphinx.ext.inheritance_diagram.InheritanceDiagram" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",tooltip="Run when the inheritance_diagram directive is first encountered."];
"sphinx.util.docutils.SphinxDirective" -> "sphinx.ext.inheritance_diagram.InheritanceDiagram" [arrowsize=0.5,style="setlinewidth(0.5)"];
"sphinx.util.docutils.SphinxDirective" [URL="../../extdev/utils.html#sphinx.util.docutils.SphinxDirective",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="A base class for Sphinx directives."];
"docutils.parsers.rst.Directive" -> "sphinx.util.docutils.SphinxDirective" [arrowsize=0.5,style="setlinewidth(0.5)"];
}
仅显示类名:
.. inheritance-diagram:: sphinx.ext.inheritance_diagram.InheritanceDiagram
:parts: 1
digraph inheritanceec46a4ed0d {
bgcolor=transparent;
rankdir=LR;
size="8.0, 12.0";
"Directive" [URL="../../extdev/markupapi.html#docutils.parsers.rst.Directive",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Base class for reStructuredText directives."];
"InheritanceDiagram" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",tooltip="Run when the inheritance_diagram directive is first encountered."];
"SphinxDirective" -> "InheritanceDiagram" [arrowsize=0.5,style="setlinewidth(0.5)"];
"SphinxDirective" [URL="../../extdev/utils.html#sphinx.util.docutils.SphinxDirective",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="A base class for Sphinx directives."];
"Directive" -> "SphinxDirective" [arrowsize=0.5,style="setlinewidth(0.5)"];
}
在以下位置停止关系图:类:sphinx.util.docutils.SphinxDirective`(最高的超类仍然是Sphinx的一部分),并从所有名称中删除最左边的公共部分(`Sphinx`):
.. inheritance-diagram:: sphinx.ext.inheritance_diagram.InheritanceDiagram
:top-classes: sphinx.util.docutils.SphinxDirective
:parts: -1
digraph inheritance834ccf9cfa {
bgcolor=transparent;
rankdir=LR;
size="8.0, 12.0";
"ext.inheritance_diagram.InheritanceDiagram" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",tooltip="Run when the inheritance_diagram directive is first encountered."];
"util.docutils.SphinxDirective" -> "ext.inheritance_diagram.InheritanceDiagram" [arrowsize=0.5,style="setlinewidth(0.5)"];
"util.docutils.SphinxDirective" [URL="../../extdev/utils.html#sphinx.util.docutils.SphinxDirective",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="A base class for Sphinx directives."];
}
-
class sphinx.ext.inheritance_diagram.InheritanceDiagram
The internal class that implements the inheritance-diagram
directive.
配置
-
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'}