【问题标题】:Testing equality测试相等性
【发布时间】:2021-09-24 12:00:09
【问题描述】:

我有两个不相同的对象ab,它们具有相同的属性和值(即它们是等效的)。我知道a is b 应该评估为False,因为ab 是不相同的,但a==b 也评估为False。这是为什么呢?

感谢阅读!

(对于上下文,对象是Biopython SeqFeatures

编辑 - 我如何得到 a 和 b

我用一个大脚本构建了一个 SeqFeatures 列表 (A)。然后,我使用脚本的功能化等效项构建了第二个列表 (B)。 abA[0]B[0]。我想测试等效性以确保函数的输出与原始脚本的输出相同。

a = A[0] 
b = B[0]
a == b # --> False 

【问题讨论】:

  • 你需要展示一些可重现的代码
  • 你能提供一个最小可重现的例子吗? stackoverflow.com/help/minimal-reproducible-example
  • 我的代码实际上是 a==b(我已经在 Spyder 变量资源管理器中手动检查了 a 和 b)。我会复制对象 a 和 b 但我认为我不能在 SO...

标签: python equality


【解决方案1】:

如果类未定义__eq__ 方法,则从object 继承的默认方法使用is 比较对象。所以除非你定义了这个方法,否则a == b 等价于a is b

Biopython 库需要实现一个 __eq__ 方法来比较属性以使其返回 True

【讨论】:

    【解决方案2】:

    从 Biopython docs 来看,Bio.SeqFeature.SeqFeature 类没有实现 __eq__ 方法,而从文档来看,object 类中的类的基类,所以如果你检查两个 @987654325 的相等性@ 对象,它检查它们在内存中的ids 的相等性,我认为这是不同的,特别是如果它们是单独创建的。

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2011-04-19
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多