sphinx.ext.inheritance_diagram – 包含繼承圖

版本 0.6 新增。

此擴充功能允許您包含繼承圖,透過 Graphviz 擴充功能 渲染。

它新增了此指令

.. inheritance-diagram::

此指令有一個或多個引數,每個引數給定一個模組或類別名稱。類別名稱可以是不完整的;在這種情況下,它們被認為存在於當前描述的模組中(請參閱 py:module)。

對於每個給定的類別,以及每個給定模組中的每個類別,都會確定基底類別。然後,從所有類別及其基底類別,生成一個圖形,然後通過 graphviz 擴充功能將其渲染為有向圖。

此指令支援一個名為 parts 的選項,如果給定,則必須是一個整數,建議指令在顯示的名稱中保留那麼多點分隔的部分(從右到左)。例如,parts=1 將僅顯示類別名稱,而不顯示包含它們的模組名稱。

在版本 2.0 中變更:parts 的值也可以是負數,表示從左側刪除多少部分。例如,如果您的所有類別名稱都以 lib. 開頭,您可以給定 :parts: -1 以從顯示的節點名稱中刪除該前綴。

該指令還支援 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 選項以限制繼承圖的範圍。

:include-subclasses: (無 值)

版本 8.2 新增。

如果給定,類別的任何子類別也將新增到圖表中。

給定上面 Python 模組中的範例,您可以像這樣指定您的繼承圖

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

這將在繼承圖中包含類別 A、B、C、D、E 和 F,但不包含模組 dummy.test 中的其他類別。

範例

以下是內部 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
類型:
dict[str, str | int | float | bool]
預設:
{}

用於繼承圖的 graphviz 圖形屬性字典。

例如

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

用於繼承圖的 graphviz 節點屬性字典。

例如

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

用於繼承圖的 graphviz 邊緣屬性字典。

inheritance_alias
類型:
dict[str, str]
預設:
{}

允許將類別的完整限定名稱映射到自訂值(當公開類別的底層路徑不合適時很有用,例如,它是一個私有類別,不應由使用者實例化)。

例如

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