同时对python graphtool中的图、顶点和边进行子类化

2024-04-23 17:58:59 发布

您现在位置:Python中文网/ 问答频道 /正文

同时对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对象。你知道吗


Tags: 实例方法网络toolclass社交graphperson
1条回答
网友
1楼 · 发布于 2024-04-23 17:58:59

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

子类化Vertex很容易,但是有几个Edge类,这取决于图是定向的还是过滤的。为了使其工作,您必须在派生类中包装返回VertexEdge对象(或其迭代器)的Graph方法,以便将它们转换为派生的EdgeVertex对象。你知道吗

在我看来,这样做只是为了让类有不同的名称,就像是在浪费精力。但这并非不可能。你知道吗

一个更简单的策略是创建一个单独的类(比如CitationGraph),该类不是Graph的子类,而是包含一个实例。然后可以实现一些方便的函数,如add_personadd_publication,它们执行基本操作,同时允许您随时访问底层的Graph。这样做可以避免很多头疼的问题,甚至可以免费提供pickle支持。你知道吗

相关问题 更多 >