在Python中,
==运算符是根据magic方法
__eq__实现的,该方法默认情况下是通过身份比较来实现的。但是,您可以重写此方法,以提供自己的对象相等性概念。请注意,如果您这样做,通常也将至少覆盖
__ne__(实现
!=操作符)和
__hash__计算实例的哈希码。
我发现,即使在Python中,使我的
__eq__实现符合Java语言中为该
equals方法的实现所列出的规则也非常有帮助:
- 这是自反的:对于任何非空参考值x,x.equals(x)应该返回true。
- 它是对称的:对于x和y的任何非空引用值,当且仅当y.equals(x)返回true时,x.equals(y)才返回true。
- 它是可传递的:对于x,y和z的任何非空引用值,如果x.equals(y)返回true,而y.equals(z)返回true,则x.equals(z)应该返回true。
- 这是一致的:对于任何非空引用值x和y,只要未修改对象的equals比较中使用的信息,对x.equals(y)的多次调用将始终返回true或始终返回false。
- 对于任何非null参考值x,x.equals(null)应该返回false。
最后一个可能应该替换
null为
None,但是规则在Python中并不像Java中那么容易。



