gpt4 book ai didi

python - __eq__ 属性和相等运算符之间的关系?

转载 作者:太空宇宙 更新时间:2023-11-04 09:00:57 24 4
gpt4 key购买 nike

所以下面的内置类有一个 __eq__ 属性,(我假设)这就是为什么你可以测试它们的实例是否相等:

>>> 1.2.__eq__( 1.2 )
True
>>> 1.2 == 1.2
True
>>> 'hello'.__eq__( 'hi' )
False
>>> 'hello' == 'hi'
False
>>> [1,2].__eq__( [1,2] )
True
>>> [1,2] == [1,2]
True

然后我很惊讶地看到 int 对象没有 __eq__,但我们仍然可以比较它们:

>>> hasattr( 1, '__eq__' )
False
>>> 1 == 2
False

这是怎么回事?我是否误解了 __eq__ 和相等运算符之间的关系?

最佳答案

int 对象有一个 __cmp__ method相反:

Called by comparison operations if rich comparison (see above) is not defined.

其中 rich comparison 包括 __eq__

演示:

>>> (1).__cmp__(2)
-1
>>> (1).__cmp__(1)
0
>>> (1).__cmp__(0)
1

__cmp__ 返回 0 时,两个值相等。

Python 3 取消了cmp() 比较和相关的特殊方法;在 Python 3 中 int 确实 有一个 __eq__ 方法:

>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=4, micro=0, releaselevel='final', serial=0)
>>> (1).__eq__(1)
True

此外,Python 3 int 对象提供其他 rich comparison methods也; __lt____le____ne____gt____ge__,所有方法都缺失Python 2 版本。

Python 从 just __cmp__ 开始,仅在 Python 2.1 中添加了丰富的比较支持(参见 PEP 207 ),直到 Python 3 才转换整数。保留两个比较系统毫无意义,因此放弃了表现力较差的形式。

关于python - __eq__ 属性和相等运算符之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25529294/

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