2024-04-28 10:25:54 发布
网友
然而,当重载^{}、^{}和^{}是有意义的时候,它可能是开箱即用的。默认情况下,__eq__将比较对象标识。这可能不是你想要的。在这种情况下,必须注意相等的对象具有相等的散列,并且,理想情况下,不相等的对象具有不同的散列(虽然这不是必需的,但它只是减少了冲突)。您应该始终使用__eq__实现__ne__,除非您有特殊的原因要这样做(这样做是为了确保逻辑一致性)。
__eq__
__ne__
此外,当重载__hash__时,必须注意当对象存储在set中时哈希不会更改。
__hash__
set
如果要支持-操作,可以执行以下操作:
-
#!/usr/bin/python class Test(object): def __init__(self, val): self.val = val def __sub__(self, y): return Test(self.val - y.val) x = Test(10) - Test(5) print x.val
在执行-操作时调用__sub__。
__sub__
然而,当重载^{} 、^{} 和^{} 是有意义的时候,它可能是开箱即用的。默认情况下,
__eq__
将比较对象标识。这可能不是你想要的。在这种情况下,必须注意相等的对象具有相等的散列,并且,理想情况下,不相等的对象具有不同的散列(虽然这不是必需的,但它只是减少了冲突)。您应该始终使用__eq__
实现__ne__
,除非您有特殊的原因要这样做(这样做是为了确保逻辑一致性)。此外,当重载
__hash__
时,必须注意当对象存储在set
中时哈希不会更改。如果要支持
-
操作,可以执行以下操作:在执行
-
操作时调用__sub__
。相关问题 更多 >
编程相关推荐