Python如何设置([])检查两个对象是否相等?对象需要定义哪些方法来自定义?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

我需要在Python中创建一个'容器'对象或类,它保存了我也定义的其他对象的记录。这个容器的一个要求是,如果两个物体被认为是相同的,则一个(任一个)被移除。我的第一个想法是使用a set([])作为包含对象来完成此要求。

但是,该集不会删除两个相同的对象实例中的一个。我必须定义什么来创建一个?

这是Python代码。

class Item(object):
  def __init__(self, foo, bar):
    self.foo = foo
    self.bar = bar
  def __repr__(self):
    return "Item(%s, %s)" % (self.foo, self.bar)
  def __eq__(self, other):
    if isinstance(other, Item):
      return ((self.foo == other.foo) and (self.bar == other.bar))
    else:
      return False
  def __ne__(self, other):
    return (not self.__eq__(other))
提问于
用户回答回答于

恐怕你必须提供一种__hash__()方法。但是你可以用它的方式编码,它不依赖于你的可变属性Item

用户回答回答于

是的,你需要一个__hash__()-方法和你已经提供的比较-运算符。

class Item(object):
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar
    def __repr__(self):
        return "Item(%s, %s)" % (self.foo, self.bar)
    def __eq__(self, other):
        if isinstance(other, Item):
            return ((self.foo == other.foo) and (self.bar == other.bar))
        else:
            return False
    def __ne__(self, other):
        return (not self.__eq__(other))
    def __hash__(self):
        return hash(self.__repr__())

扫码关注云+社区

领取腾讯云代金券