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

2024-02-25

我需要在 Python 中创建一个“容器”对象或类,它保存我也定义的其他对象的记录。该容器的一个要求是,如果两个对象被认为是相同的,则删除一个(任一对象)。我的第一个想法是使用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))

口译员

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

很清楚__eq__(),这被称为x == y,不是集合调用的方法。什么叫做?我还必须定义什么其他方法?

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


是的,您需要一个__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__())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 动态导入,不带捆绑文件

    我有一个与 Webpack 捆绑在一起的 React 项目 我有一个组件 我希望它动态渲染组件 就我而言 组件的路径来自 props 另外 这些组件没有捆绑在我的项目 js 文件中 它们是外部 React 组件 库 我尝试过动态 ES6 导
  • 除非是纯文本,否则 SVG 外来对象内容不会显示

    我正在尝试使用 SVG 绘图中的foreignObject 标签输出 HTML 我正在使用 d3 生成元素 只有当foreignObect 标签内的内容是纯文本时 foreignObject 标签内的HTML 内容才会显示 否则它只会显示为
  • ServiceStack Redis,如何以列表形式返回Lua表

    我正在使用 ServiceStack 的 Redis 客户端 我有一个 Lua 脚本 它使用多个 Redis 调用的结果填充 Lua 表 我想以某种方式返回这张表 我的想法是使用客户端库中的 ExecLuaShaAsList 方法 并在 l
  • 测试是否安装了字体

    有没有一种简单的方法 在 Net中 来测试当前计算机上是否安装了字体 string fontName Consolas float fontSize 12 using Font fontTester new Font fontName fo
  • Django Rest 框架、CSRF 和 Vue.js

    我正在尝试使用 Vue js 对我使用 Django Rest Framework 创建的 REST Api 执行一些 POST 方法 问题是 我得到了CSRF Failed CSRF token missing or incorrect
  • 惰性求值和短路求值有什么区别?

    来自维基百科 惰性评估 http en wikipedia org wiki Lazy evaluation is 在编程语言理论中 惰性求值或按需调用是 延迟表达式求值的求值策略 直到需要它的值为止 短路评估 http en wikipe
  • 从 R 的句子中提取动词?

    请注意 我知道从文本中提取名词和动词 https stackoverflow com questions 2970829 extracting nouns and verbs from text它对我不起作用 因为他们使用的功能不存在于op
  • Android HTML Jsoup

    我试图从我的拼贴新闻网站获取图像的绝对 URL 但到目前为止还没有成功 我正在这个网站上工作http www dcu ie news index shtml http www dcu ie news index shtml 正如您从源中看到
  • Angular 2 AsynPipe 不支持 Observable

    我收到以下错误 EXCEPTION Cannot find a differ supporting object object Object in files async in Images 1 9 这是模板的相关部分 img 这是我的代码
  • 如何使基类中的所有隐藏名称在派生类中可访问?

    从这个问题开始 从纯虚类 A 派生的指针无法访问纯类 B 的重载方法 https stackoverflow com questions 59756738 pointer derived from pure virtual classa c
  • 使用 ui-router 和 AngularJS 的多个嵌套 ui-views

    我只想首先说 我尽可能多地查看了与此问题相关的堆栈溢出问题 但没有看到任何与我遇到的问题有关的问题 有些很相似 但又不完全一样 问题是这样的 我设置了以下 stateProvider stateProvider state root url
  • 如何在 FCM 通知中创建主题

    我正在尝试 Firebase Notification API 当我从控制台向应用程序发送下游消息时 该服务工作得非常完美 但是如何向主题注册用户发送消息 我在android端做了 FirebaseMessaging getInstance
  • 在 symfony 中找不到 PHP 模板

    我是 symfony 的新手 我想使用 PHP 模板引擎 以下是我为使其发挥作用而遵循的步骤 1 在config yml中启用PHP模板引擎 templating engines twig php 2 在routing yml中定义我的控制
  • 错误:无法在 Eclipse 中找到或加载主类

    我在 Eclipse 4 2 中运行项目时遇到问题 我有一个 Java 程序 其中有一个名为 Conversion 的类 Eclipse 可以很好地构建该项目 我可以通过导航到工作区中项目文件夹中的 bin 并输入以下命令来从命令行运行该程
  • 如果持续的接口反模式是一种犯罪行为,那么 Swing 为什么要这样做呢?

    我正在制作一个 Swing 应用程序 并意识到我有一些类需要访问同一组常量 我无法让自己宣布其中一个是它们的主要持有者 并将它们全部放在那里并让其他人参考 我想 嘿 我会让它们都从某个共同的地方继承 但 Java 不做多重继承 但我可以在事
  • Git:哪个是分支的默认配置远程?

    我有一个远程裸存储库hub 我只在master分支 下面这个错误消息的最后一句话让我想知道 我如何找出哪个是 当前分支的默认配置远程 我该如何设置它 myserver progs git remote v hub sitehub progs
  • c,传递结构作为参数

    我需要像这样传递一些结构作为函数参数 void myFunc unsigned char c 我会用myFunc 4 myFunc 8 or so 现在该函数接受一个结构作为参数 所以我尝试了 typedef struct unsigned
  • 使用 VBA 更改 Excel 图表的方向(纵向或横向)

    我正在尝试编写一个宏来自动打印我使用另一个宏在工作簿中创建的所有图表 实际上是数百个 我遇到的问题是我无法弄清楚如何使用 VBA 将图形从纵向布局更改为横向布局 我想知道是否有人可以帮助我 我尝试了下面的代码 但它在 ChartObject
  • Javascript正则表达式匹配JSON键值对的值

    给定以下键值对 我如何才能仅匹配值 包括引号 解释 我正在 IDE 中进行查找和替换 我有数百个键 值对 其中的值需要从字符串更改为对象 所以基本上替换了值 ElevationFilenameIn Input raster elevatio
  • Python set([]) 如何检查两个对象是否相等?对象需要定义哪些方法来自定义 this?

    我需要在 Python 中创建一个 容器 对象或类 它保存我也定义的其他对象的记录 该容器的一个要求是 如果两个对象被认为是相同的 则删除一个 任一对象 我的第一个想法是使用set 作为包含对象 来完成这个要求 但是 该集合不会删除两个相同