为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃尔雅 2021-07-26 16:19:21
我想__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。我认为这就像一个先有鸡还是先有蛋的问题,任何建议都值得赞赏。
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

建议只比较id属性。这可能是最好的解决方案,如果可能的话,你绝对应该这样做。

如果不是,你的顶点的结构是什么?它就像一棵树,邻接只走一条路吗?然后这样写就可以了;最终你会用完节点。

如果顶点可以环回,我们将不得不做一些更复杂的事情。基本技巧是维护一堆你没有访问过的顶点,以及一个你已经比较过的节点列表。对于每个循环,从堆栈中弹出顶部元素。如果你看到任何会使元素比较为假的东西,你可以返回。否则,如果您之前没有访问过它们,请将相邻节点放在堆栈上,更新访问过的节点,然后继续。


查看完整回答
反对 回复 2021-08-03
  • 2 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信