Python:x == y和x .__ eq__y()返回不同内容的情况。为什么?

五木五次

我正在上我的第一门计算机科学课程,并且我们刚刚学习了有关类实现和继承的知识。特别是,我们仅介绍了方法重写以及object默认情况下定义的如何从超类继承作为尝试这种特殊情况的示例之一,我使用了以下代码:

class A:
    def __init__(self, i):
        self.i = i
    def __str__(self):
        return "A"
    # Commenting out these two lines to not override __eq__(), just use the 
    # default from our superclass, object
    #def __eq__(self, other):
        #return self.i == other.i

x = A(2)
y = A(2)

>>>print(x == y)
False
>>>print(x.__eq__(y))
NotImplemented

我期望从中得到结果(x == y),因为据我所知,默认值__eq__()是检查它们是否是相同的对象,而不用担心内容。Falsex并且y具有相同的内容,但是是不同的对象。第二个让我感到惊讶。

所以我的问题是:我以为(x==y)并且x.__eq__(y)是同义的,并且拨打了完全相同的电话。为什么这些产生不同的输出?为什么第二个条件返回NotImplemented呢?

布莱克金

您从继承的方法返回NotImplemented__eq__是一个特殊的内置值,在Python中用作哨兵。可以通过__magic__实现数学运算符或比较运算符方法返回它,以指示该类不支持尝试的运算符(具有提供的参数)。

这比引发异常更为有用,因为它允许Python退回到其他选项来解决操作员的使用。例如,如果您这样做x + y,Python将首先尝试运行x.__add__(y)如果返回NotImplemented,则接下来将尝试“反向”版本,y.__radd__(x)如果它y是比x现在更复杂的类型,则该版本可能会起作用

如果您要询问的是,x == yPython首先会尝试x.__eq__(y),然后尝试y.__eq__(x)最后是x is y(将始终评估为布尔值)。由于object.__eq__回报率NotImplemented在所有情况下,你的类回落到识别比当你使用真正的运营商,但你表演的NotImplemented哨兵,当你调用__eq__直接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

x + = y和x = x + y之差

来自分类Dev

当x = 10 ^(30),y = -10 ^(30)和z = 1时,为什么(x + y)+ z和x +(y + z)不同?

来自分类Dev

为什么在Python中x * = y比x = x * y慢?

来自分类Dev

(X!= Y)和(!(X == Y))之间的区别?

来自分类Dev

坡度的X和Y截距-Python

来自分类Dev

(x不是None)和(y不是None)和(x和y)的python区别不是None

来自分类Dev

是否可以在知道X ^ Y和X + Y的情况下求解X和Y?

来自分类Dev

libgdx x和y的区别

来自分类Dev

显示X和Y坐标?

来自分类Dev

检索 FAB 的 X 和 Y

来自分类Dev

使用python显示和编辑图x和y轴

来自分类Dev

为什么在python 3.8中sqrt(x * x + y * y)!= math.hypot(x,y)?

来自分类Dev

返回x和y坐标元组的列表

来自分类Dev

函数(x,y),x和y都变化

来自分类Dev

x |之间的差异 y和y <(x)以bash表示吗?

来自分类Dev

[X|Y] 和 [X,Y] 之间的序言差异

来自分类Dev

(x % y) 和 (x & (y-1)) 等价吗?

来自分类Dev

为什么不翻译($ {x},$ {y})和翻译($ {-x},$ {-y})取消呢?

来自分类Dev

为什么names(x)<-y和“ names <-”(x,y)不相等?

来自分类Dev

为什么当x = 12和y = 1时x&y == 0是不正确的?

来自分类Dev

如何获得ndarray的x和y维-Numpy / Python

来自分类Dev

Python:使用X和Y值绘制图片

来自分类Dev

在python中,“ for”函数是否是交互的x因子和y因子?

来自分类Dev

ValueError:x和y必须为相同大小的Python

来自分类Dev

Python:使用X和Y值绘制图片

来自分类Dev

Python图形库:如何设置窗口的x和y坐标?

来自分类Dev

使用python绘图时缺少X和Y轴

来自分类Dev

Python Pandas图多索引指定x和y

来自分类Dev

缩放 Y 轴和 X 轴 python 图

Related 相关文章

热门标签

归档