同时对graph-tool
中的图、顶点和边类进行子类化以实现特定类型的图(如社交网络)的行为是否可行?
更具体地说,我想要一个class CollaborationNetwork(Graph)
,它包含class Person(Vertex)
、class Publication(Vertex)
、class Authored(Edge)
等实例。
我假设Person和Publication顶点由property_map
标识,而Graph方法被包装成add_authorship(Person, Publication)
类,它创建了Authored
的实例。你知道吗
我不确定的是,基于graph-tool
实现这样的抽象是否有意义,如果有,如何将CollaborationNetwork
连接到Vertex和Edge的子类。
(我知道只有Subclassing Graph from the graph_tool package才能工作)。你知道吗
关于动机:
我将模拟社交网络的增长,并将其与实际数据进行比较,这些数据存储为Neo4j图。
我喜欢py2neoOGM方法,它将这些人员和发布数据表示为python对象。你知道吗
这是可能的,但我看不出这样做有什么真正的好处。你知道吗
子类化
Vertex
很容易,但是有几个Edge
类,这取决于图是定向的还是过滤的。为了使其工作,您必须在派生类中包装返回Vertex
或Edge
对象(或其迭代器)的Graph
方法,以便将它们转换为派生的Edge
和Vertex
对象。你知道吗在我看来,这样做只是为了让类有不同的名称,就像是在浪费精力。但这并非不可能。你知道吗
一个更简单的策略是创建一个单独的类(比如
CitationGraph
),该类不是Graph
的子类,而是包含一个实例。然后可以实现一些方便的函数,如add_person
和add_publication
,它们执行基本操作,同时允许您随时访问底层的Graph
。这样做可以避免很多头疼的问题,甚至可以免费提供pickle
支持。你知道吗相关问题 更多 >
编程相关推荐