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

时间:2018-03-22 12:56:56

标签: python equality

在实现__eq__函数时,我想知道使用is关键字进行身份测试是否应该成为测试的一部分?当变量指向同一个对象实例时,True函数可以立即对2个不同变量的相等性进行测试,并将其评估为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 

1 个答案:

答案 0 :(得分:1)

您可以实现这一点,尽管对于大多数用例来说,它可能会有点微优化。 Python核心开发人员应用此优化思想,了解他们如何为in s实现list运算符;代码是C(在CPython中),但equivalent Python logic将是:

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

但是,请注意,这可能不是您想要的,例如,numpy.NAN is numpy.NANTruenumpy.NAN == numpy.NANFalse。但这是unusual case