gpt4 book ai didi

python - 如何使 Python 对象在相等性测试中始终返回 true?

转载 作者:太空宇宙 更新时间:2023-11-04 07:19:43 25 4
gpt4 key购买 nike

编辑:下面的代码有一个简单的错误,实际上并没有说明问题。我把它留在这里(未更正),但我仍然对底部问题的答案感到好奇。

我在 Python 中有以下对象,它应该总是为相等性测试返回 true:

class Wildcard(object):
def __eq__(self, other):
return True

它在某些情况下有效,但并非全部:

>>> w = Wildcard()
>>> w == 'g'
True
>>> 'g' == w
True
>>> w == 10
True
>>> 10 == 'w'
False

据我了解,== 运算符将第二个操作数传递给第一个操作数的 __eq__ 方法,这解释了为什么 w == 10 有效而 10 == w 无效。这就提出了两个问题。首先,是否可以构造具有此属性的对象,而不管它是哪个操作数?其次,为什么这适用于字符串,而不适用于 int? String 的 __ eq__ 方法如何使它评估 'g' == w 为 True?

最佳答案

不幸的是,没有办法(据我所知)构造这样一个对象。考虑:

>>> class Wildcard(object):
... def __eq__(self, other):
... return True
...
>>> w = Wildcard()
>>> w == 10
True
>>> 10 == w
True
>>> class Joker(object):
... def __eq__(self, other):
... return False
...
>>> j = Joker()
>>> w == j
True
>>> j == w
False

w(一个通配符)没有理由优先于j(一个Joker)在这种情况下。


现在,您可能想知道为什么这对字符串和整数有效——这是因为如果类的测试返回单例 NotImplemented,那么测试会从第一个参数委托(delegate)给第二个参数:

>>> class Foo(object):
... def __eq__(self, other):
... if isinstance(other, Wildcard):
... return NotImplemented
... else:
... return False
...
>>> f = Foo()
>>>
>>> f == 1
False
>>> f == Foo()
False
>>> f == w
True

关于python - 如何使 Python 对象在相等性测试中始终返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23401539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com