如何为需要比较相同类的自定义对象定义 __eq__ func

我想__eq__()为自定义类实现一个方法Vertex。


然而,当我仔细思考这个问题时,我发现它很奇怪。


例如


class Vertex():

    def __init__(self,node):

        self.id = node

        self.adjacent = {}

但是对于相邻的dict,它存储这样的数据:


 {neighbour_vertex1 : edge, neighbour_vertex2 : edge, ....}

如果我想实现该__eq__()方法,它应该如下所示:


def __eq__(self,other):

    return self.id == other and self.adjacent == other.adjacent

但self.adjacent == other.adjacent需要比较字典


 {neighbour_vertex1 : edge, neighbour_vertex2 : edge, ....}

 {neighbour_vertex1 : edge, neighbour_vertex2 : edge, ....}

为了比较它们,我必须定义neighbout_vertex确实是 class 实例的比较函数Vertex。


我认为这就像一个先有鸡还是先有蛋的问题,任何建议都值得赞赏。


侃侃尔雅
浏览 95回答 2
2回答

呼啦一阵风

建议只比较id属性。这可能是最好的解决方案,如果可能的话,你绝对应该这样做。如果不是,你的顶点的结构是什么?它就像一棵树,邻接只走一条路吗?然后这样写就可以了;最终你会用完节点。如果顶点可以环回,我们将不得不做一些更复杂的事情。基本技巧是维护一堆你没有访问过的顶点,以及一个你已经比较过的节点列表。对于每个循环,从堆栈中弹出顶部元素。如果你看到任何会使元素比较为假的东西,你可以返回。否则,如果您之前没有访问过它们,请将相邻节点放在堆栈上,更新访问过的节点,然后继续。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python