2017-09-04 14 views
0

グラフ、頂点、エッジのクラスを同時にサブクラス化することは可能ですか?graph-toolソーシャルネットワークなどの特定の種類のグラフ?
具体的には、私は私がグラフメソッドがadd_authorship(Person, Publication)の同類に包まれながら、人と出版の頂点が、property_mapで識別されていることを想像などclass Person(Vertex)のインスタンスを含みclass CollaborationNetwork(Graph)class Publication(Vertex)class Authored(Edge)
を持っていると思いますAuthoredのインスタンスを作成します。同時に、Pythonグラフツールのグラフ、頂点、エッジをサブクラス化する

graph-toolのような抽象化を実装するのが合理的かどうか、もしあればCollaborationNetworkをVertexとEdgeのサブクラスに接続する方法がわかりません。 (私はちょうどSubclassing Graph from the graph_tool packageが働くことができます知っています)。動機について


が、私はソーシャルネットワークの成長をシミュレートすることになるとのNeo4jグラフとして保存されている実際のデータ、と比較されます。 私はpy2neo OGMアプローチが好きです。これは、これらのPersonおよびPublicationデータをPythonオブジェクトとして表しています。

答えて

0

これは可能ですが、そうすることの本当の利点はありません。

サブクラスVertexは簡単ですが、グラフの方向またはフィルタに応じていくつかのクラスがあります(Edge)。それを機能させるには、派生クラスのVertexまたはEdgeオブジェクト(またはそのイテレータ)を返すGraphメソッドをラップして、派生したEdgeおよびVertexオブジェクトに変換する必要があります。

クラスを別の名前にするためにのみこれを行うだけで、私は努力の無駄に思えます。しかし、それは不可能ではありません。

より単純な戦略は、Graphのサブクラスではなく、代わりに1のインスタンスを含む別のクラス(たとえばCitationGraph)を作成することです。基本的な操作を行うadd_personadd_publicationのような便利な機能を実装し、いつでも基盤となるGraphにアクセスすることができます。そうすることで、多くの頭痛を防ぎ、基本的には無料でpickleのようなものを提供します。

+0

ありがとう、Tiago。これは私の質問に完全に答えます! 可能であれば、 "オブジェクトグラフマッピング"アプローチは過度のものになると私は思っていました。 Graphインスタンスを含めることについてのあなたの提案に関して、私たちは既に経験があり、とてもうまく動作します:[scientometric-graph-tool](https://github.com/nanumyan/scientometric-graph-tool) –

関連する問題