默认情况下 __eq__() 方法里面有啥

Posted

技术标签:

【中文标题】默认情况下 __eq__() 方法里面有啥【英文标题】:What are inside the __eq__() method by default默认情况下 __eq__() 方法里面有什么 【发布时间】:2020-01-13 22:17:32 【问题描述】:

我读到了这个(来自here):

用户自定义类默认有__eq__()__hash__()方法;使用它们,所有对象都比较不相等(除了它们自己),x.__hash__() 返回一个适当的值,使得 x == y 意味着 x 是 y 和 hash(x) == hash(y)。

我想知道__eq__() 方法是否默认定义为:

def __eq__(self, other):
    return hash(self) == hash(other)

【问题讨论】:

那只适用于hashable 的东西。你将如何检查不可散列的东西? :) 【参考方案1】:

不,更像是:

def __eq__(self, other)
    return self is other

您不能使用hash(),因为不同的对象可能具有相同的哈希值。

【讨论】:

【参考方案2】:

您可以阅读以下参考资料:https://eev.ee/blog/2012/03/24/python-faq-equality/

在您只是尝试比较 2 个对象而不覆盖 eq 的默认方法中,它将查看它们是否是相同的 2 个对象,更像如下:

def __eq__(self, other)
    return self is other

【讨论】:

【参考方案3】:

可以参考existing question

它解释了如何正确使用__hash__()__eq__()

【讨论】:

以上是关于默认情况下 __eq__() 方法里面有啥的主要内容,如果未能解决你的问题,请参考以下文章

Python魔法方法(20):__eq__(self, other)方法

有啥理由给 self 一个默认值吗?

[转] Java:对Scanner的useDelimiter()方法的疑问

阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第2节 抽象类_5_接口的默认方法定义

php 魔术方法和魔术常量

使类支持比较操作