NetworkX MultiDiGraph 未打印

NetworkX MultiDiGraph doesn't get printed

我正在尝试打印 NetworkX MultiDiGraph 的一个实例,如下所示:

import networkx as nx
G = nx.MultiDiGraph()
G.add_node(0)
print(G)

我的理解是,由于 G 是 class 的一个实例,即使未实现 __str__,它也应该向字符串打印一些内容。但是,这只会打印一个空行。我还测试了这是否是一个 NoneType 对象:

isinstance(G, nx.MultiDiGraph)

这个returnsTrue。这怎么可能?如果相关,我会将此图传递给其他一些包,该包返回与 NoneType 输入相关的错误。在此先感谢您的帮助。

Networkx 允许您命名图形,这就是您打印图形时得到的名称。例如:

import networkx as nx
G = nx.MultiDiGraph(name = 'myG')
G.add_node(0)
print(G)
> myG

名称默认为空字符串。这就是正在打印的内容。我认为从代码上看不是很明显,但是在this link处给出了Graphclass的定义。其中,__str__ 定义为 return 图形名称。图名定义为

@property
    def name(self):
        """String identifier of the graph.

        This graph attribute appears in the attribute dict G.graph
        keyed by the string `"name"`. as well as an attribute (technically
        a property) `G.name`. This is entirely user controlled.
        """
        return self.graph.get("name", "")

所以默认名称是一个空字符串。现在你使用了 MultiDiGraph,所以它被隐藏了 - MultiDiGraph 建立在 DiGraph 之上,DiGraph 建立在 Graph 之上,所以隐藏在所有也就是说,如果 MultiDiGraph 没有给出名称,它默认为空字符串。