gpt4 book ai didi

python - 为什么 int.__eq__ 似乎没有在 python2 中实现

转载 作者:行者123 更新时间:2023-12-04 09:43:42 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How int() object uses "==" operator without __eq__() method in python2?

(3 个回答)


1年前关闭。




我头疼,看来我不是唯一一个,但真的没有解决办法吗?我觉得很难相信!

所以问题是为什么我不能调用int.__eq__有 2 个运算符或 i.__eq__一个?如何使用 __eq__ (和其他比较运算符)对于一个整数序列的每项比较?

这是来自 python2.7.17 的转储:

>>> i = 0
>>> type(i)
<type 'int'>
>>> i.__eq__(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute '__eq__'
>>> type(i).__eq__(i, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected 1 arguments, got 2
>>> type(i).__eq__(0)
NotImplemented

但是我的来自 python3.6.9 的 dumo 表现得很好:
>>> i = 0
>>> type(i)
<class 'int'>
>>> i.__eq__(0)
True
>>> type(i).__eq__(i, 0)
True
>>> type(i).__eq__(0) # this is not expected to work, but just for the sake of voodoo.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected 1 arguments, got 0

我知道不再支持 python2,但是有一些应用程序只使用 python2,我想让我的代码向后兼容。

所以那里的任何人都有一个解决方案来破解比较魔术运算符方法作为python2中的函数调用?我确信必须有一些解决方法。

似乎有一些关于此的信息。我刚刚读到 python2 在某些情况下会退回到使用 cmp ,而在 python3 中没有 cmp (或者我读过)。所以我想要做的事情不是使用 eq 和 ne 而是使用 cmp 但我喜欢对此有一些额外的看法

最佳答案

一般规则是:不要触及 dunderscore 方法,而是使用函数和运算符,它们将在必要时委托(delegate)给 dunderscore 实现。在您的情况下,您正在寻找 ==运算符或等效功能 operator.eq .

from operator import eq
from functools import partial

print eq(1, 2)

f = partial(eq, 1)
print f(2)

关于python - 为什么 int.__eq__ 似乎没有在 python2 中实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62214848/

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