我正在尝试实现一个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)
,从而导致无限循环。
动态生成两个属性之一(node for node in all_nodes if self in node.sucessors)
应该是可能的,但是我需要跟踪属于一个图的所有节点,如果我只有一个图但使用一个图,这很容易(将其添加到weakref.WeakSet
类属性中)__init__
如果我有多个不相交的图,所有节点的大集合会导致大量计算工作,而且我看不到如何修改前辈集合。
有人对此有很好的解决方案吗?