同时在 python graph-tool 中对 Graph、Vertex 和 Edge 进行子类化

Sub-classing Graph, Vertex and Edge in python graph-tool at the same time

可不可以子class,同时graph-tool中的Graph,Vertex,Edgeclasses来实现某类的行为图表,例如社交网络?
更具体地说,我想要一个包含 class Person(Vertex)class Publication(Vertex)class Authored(Edge)
实例的 class CollaborationNetwork(Graph) 我想象 Person 和 Publication 顶点由 property_map 标识,而 Graph 方法被包装到 add_authorship(Person, Publication) 之类的东西中,它创建了 Authored.

的实例

我不确定基于 graph-tool 实现这种抽象是否有意义,如果是的话,如何将 CollaborationNetwork 连接到 Vertex 的子 classes和边缘。 (我知道只有 可以工作)。

关于动机:
我将模拟社交网络的增长,并将其与存储为 Neo4j 图的实际数据进行比较。 我喜欢 py2neo OGM 方法,它将这些 Person 和 Publication 数据表示为 python 个对象。

这是可能的,但我看不出这样做有什么真正的好处。

Subclassing Vertex 很容易,但是有几个 Edge classes,这取决于图形是定向的还是过滤的。为了使其工作,您必须将 Graph 方法包装在派生的 class 中,即 return VertexEdge 对象(或其迭代器)以便他们将它们转换为您派生的 EdgeVertex 对象。

做这一切只是为了 classes 有不同的名字在我看来是浪费精力。但也不是不可能。

一个更简单的策略是创建一个单独的 class(比如 CitationGraph),它不包含 subclass Graph,而是包含一个实例.然后,您可以实现诸如 add_personadd_publication 之类的便利函数来执行您的基本操作,同时允许您随时访问基础 Graph。这样做可以避免很多麻烦,甚至可以免费为您提供 pickle 等支持。