在实现__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
答案 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.NAN
是True
但numpy.NAN == numpy.NAN
是False
。但这是unusual case。