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

在实现__eq__函数时,我想知道使用is关键字测试身份是否应该成为测试的一部分?当变量指向同一个对象实例时,is函数可以立即测试2个不同变量的相等性.如果变量指向不同的实例,则当然需要进一步测试.假设我们有S = U然后显然我们希望S == U返回True并且测试身份会加快这一点.

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

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

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

但是,请注意这可能不是您想要的,例如,numpy.NAN是numpy.NAN是True但是numpy.NAN == numpy.NAN是False.然而这是unusual case.

点赞