当前位置: 首页 > 面试题库 >

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

越嘉茂
2023-03-14
问题内容

我需要在Python中创建一个“容器”对象或类,以记录我也定义的其他对象。此容器的一项要求是,如果两个对象被视为相同,则将一个(一个)删除。我的第一个想法是使用aset([])作为包含对象,以完成此要求。

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

这是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))

口译员

>>> set([Item(1,2), Item(1,2)])
set([Item(1, 2), Item(1, 2)])

显然,__eq__()x == y调用的不是集合所调用的方法。叫什么 我还必须定义什么其他方法?

注意:Item s必须保持可变,并且可以更改,因此我无法提供__hash__() 方法。
如果这是唯一的方法,那么我将重写以使用不可变Items。


问题答案:

恐怕您将不得不提供一种__hash__()方法。但是您可以用这种方式进行编码,即它不依赖于您的可变属性Item



 类似资料:
  • 问题内容: 说我的课很简单 我希望将此类s 的集合存储在People类的属性中,该属性是类型为Person的数组 也许我做到这一点如下 问题:请问我如何检查people.list是否包含实例alex? 我很想尝试的简单尝试 称一个错误 问题答案: 有两个功能: 编译器在抱怨是因为编译器知道不是,因此需要一个谓词,但不是谓词。 如果阵列中的人员是(不是),则可以使用: 由于它们不相等,因此可以将第二

  • 问题内容: 在Go中,如何检查对象是否响应方法? 例如,在Objective-C中,可以通过执行以下操作来实现: 问题答案: 一个简单的选择是仅使用您要检查的方法声明一个接口,然后针对您的类型进行类型断言;例如: 如果您打算对自己的类型进行任何疯狂的操作,则可能要使用该软件包。http://golang.org/pkg/reflect

  • 我有两个arraylist。employee类和user类的ArrayList。employee类将name、age、address作为字段。用户类将名称、年龄、地址作为字段。下面是两个列表 要检查用户是否和员工的地址相同。如果用户没有地址,则从员工处复制。

  • 本文向大家介绍JavaScript比较两个对象是否相等的方法,包括了JavaScript比较两个对象是否相等的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript比较两个对象是否相等的方法。分享给大家供大家参考。具体如下: 在Python中可以通过cmp()内建函数来比较两个对象所包涵的数据是否相等(数组、序列、字典)。但是在javascript语言中并没有相关的实现。

  • 问题内容: 新的ES 6(和谐)引入了新的Set对象。Set使用的身份算法类似于运算符,因此不太适合比较对象: 如何自定义Set对象的相等性以进行深层对象比较?有没有像Java一样的东西? 问题答案: ES6 对象没有任何比较方法或自定义比较可扩展性。 的,而方法只关闭它是一个基本相同的实际物体或相同的值,没有办法插头插入或更换只是逻辑。 你大概可以从派生您自己的对象和替换,并与一些做了深刻的对象

  • 本文向大家介绍检查两个StringBuilder对象在C#中是否相等,包括了检查两个StringBuilder对象在C#中是否相等的使用技巧和注意事项,需要的朋友参考一下 要检查两个StringBuilder对象是否相等,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-