gpt4 book ai didi

python - object.__eq__ 如何访问调用它的方法的范围?

转载 作者:行者123 更新时间:2023-11-30 23:08:40 26 4
gpt4 key购买 nike

如果我像这样在 Python 2.7 中定义一个对象:

class C(object):
def __eq__(self, other):
return object.__eq__(other)

平等如人们所愿:

In [2]: c = C()

In [3]: d = c

In [4]: d == c
Out[4]: True

In [5]: c == d
Out[5]: True

In [6]: C() == C()
Out[6]: False

但是,当我调用 object.__eq__(other) 时,我根本没有传递 self,那么它从哪里获取它呢?

最佳答案

它无法访问self,不,只返回NotImplemented单例:

>>> object.__eq__(None)
NotImplemented

因为object.__eq__绑定(bind)到object类型。只有 object 本身(如果传入)才会产生 True 结果:

>>> object.__eq__(object)
True

它用于测试是否相等,而不是实例。

通过扩展,除非您传入 object,否则您的类将返回 NotImplemented:

>>> C().__eq__(None)
NotImplemented
>>> C().__eq__(object)
True
>>> C() == object
True

然后,Python 要求另一个对象进行相等性测试,如果也返回 NotImplemented,则使用身份测试

所以最后,您也可以删除 __eq__ 方法,因为它什么也不做,只是创建了一些额外的工作,但不会带来任何结果。 :-)

关于python - object.__eq__ 如何访问调用它的方法的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31618676/

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