我应该在eq函数中测试对象标识吗

2024-04-19 06:31:02 发布

您现在位置:Python中文网/ 问答频道 /正文

在实现__eq__函数时,我想知道使用is关键字测试身份是否应该是测试的一部分?当变量指向同一个对象实例时,is函数可以立即对两个不同变量的相等性进行测试。如果变量指向不同的实例,当然还需要进一步的测试。假设我们有S = U,那么显然我们希望S == U返回True,身份测试将加快这一速度。你知道吗

def __eq__(self, other):
    if self is other:
        return True
    else:
        pass # do another user defined test for equality 

Tags: 对象实例函数selftruereturnifis
1条回答
网友
1楼 · 发布于 2024-04-19 06:31:02

您可以实现这一点,尽管对于大多数用例来说,这可能是一个微小的优化。Python核心开发人员应用了这个优化思想,他们实现了in操作符来实现list;代码是C(在CPython中),但是equivalent Python logic应该是:

any(element is target or element == target for element in lst)

但是,请注意这可能不是您想要的,例如,numpy.NAN is numpy.NANTrue,而numpy.NAN == numpy.NANFalse。然而,这是一个unusual case。你知道吗

相关问题 更多 >