保持 Python 类相等:等价方法综合指南
在 Python 中,eq 和 ne 特殊方法提供了一种方便的方法来定义自定义类的等效性。虽然比较 __dict__ 的基本方法是一个可行的选择,但它可能面临子类以及与其他类型的互操作性的挑战。
更强大的等价处理
为了解决这些问题局限性,考虑更全面的实现:
class Number: def __init__(self, number): self.number = number def __eq__(self, other): if isinstance(other, Number): return self.number == other.number return NotImplemented def __ne__(self, other): x = self.__eq__(other) if x is not NotImplemented: return not x return NotImplemented def __hash__(self): return hash(tuple(sorted(self.__dict__.items()))) class SubNumber(Number): pass
这个版本包括:
验证和测试
为了验证此方法的稳健性,这里有一组断言:
n1 = Number(1) n2 = Number(1) n3 = SubNumber(1) n4 = SubNumber(4) assert n1 == n2 assert n2 == n1 assert not n1 != n2 assert not n2 != n1 assert n1 == n3 assert n3 == n1 assert not n1 != n3 assert not n3 != n1 assert not n1 == n4 assert not n4 == n1 assert n1 != n4 assert n4 != n1 assert len(set([n1, n2, n3])) == 1 assert len(set([n1, n2, n3, n4])) == 2
这些断言演示了等价方法的正确行为以及哈希值的一致性。
通过采用这种更全面的方法,您可以创建具有强大等价处理功能的 Python 类,确保可靠的比较以及准确的集合和字典操作。
以上是如何确保我的 Python 类真正相等:等效方法指南的详细内容。更多信息请关注PHP中文网其他相关文章!