Node
特に後継者と先行者のセットを持つ有向グラフのノードを表すクラスを実装しようとしています。セットのように動作したいNode.predecessors
とNode.predecessors
思います。特に、それらの要素を反復処理し、要素を追加および削除し、包含をチェックし、反復可能オブジェクトからそれらを設定したいと考えています。ただし、node_1.sucessors.add(node_2)
それが True である必要がありますnode_1 in node_2.pedecessors
。
この魔法を実装する の新しいサブクラスを書くことは可能だと思われますset
が、私が見る限り、そのようなクラスの実装は非常に面倒ですNode
。後継者であり、追加などのためにいくつかの特別なメソッドが必要になるため、それnode_1.sucessors.add(node_2)
は呼び出さnode_2.predecessors.add(node_1)
れず、無限ループにつながります。
その場で 2 つのアトリビュートの 1 つを生成する(node for node in all_nodes if self in node.sucessors)
ことは可能ですが、グラフに属するすべてのノードを追跡する必要がありweakref.WeakSet
ます__init__
。すべてのノードの大きなセットは、複数のばらばらなグラフがある場合に計算量が大きくなり、先行ノードのセットを変更する方法がわかりません。
誰かがこれに対する良い解決策を持っていますか?