同时在 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 Vertex
或 Edge
对象(或其迭代器)以便他们将它们转换为您派生的 Edge
和 Vertex
对象。
做这一切只是为了 classes 有不同的名字在我看来是浪费精力。但也不是不可能。
一个更简单的策略是创建一个单独的 class(比如 CitationGraph
),它不包含 subclass Graph
,而是包含一个实例.然后,您可以实现诸如 add_person
和 add_publication
之类的便利函数来执行您的基本操作,同时允许您随时访问基础 Graph
。这样做可以避免很多麻烦,甚至可以免费为您提供 pickle
等支持。
可不可以子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 Vertex
或 Edge
对象(或其迭代器)以便他们将它们转换为您派生的 Edge
和 Vertex
对象。
做这一切只是为了 classes 有不同的名字在我看来是浪费精力。但也不是不可能。
一个更简单的策略是创建一个单独的 class(比如 CitationGraph
),它不包含 subclass Graph
,而是包含一个实例.然后,您可以实现诸如 add_person
和 add_publication
之类的便利函数来执行您的基本操作,同时允许您随时访问基础 Graph
。这样做可以避免很多麻烦,甚至可以免费为您提供 pickle
等支持。