是否存在类似__eq__的可比较3个及以上对象的函数或魔法方法?
多对象相等比较的解决方案
- Python 中的
__eq__是二元比较魔法方法,只能处理两个对象的相等判断,它的定义只接受self和other两个参数,所以直接给它传两个以上参数肯定会报参数数量不匹配的错误,这是它的设计决定的。
自定义多对象比较函数
没有专门的多元比较魔法方法,最简单的方式是自己写一个普通函数来处理任意数量对象的相等判断:
def all_equal(*args): if not args: return True # 空参数的情况可根据需求调整返回值 first_obj = args[0] # 逐个和第一个对象比较,全部相等才返回True return all(first_obj == item for item in args[1:])
使用示例:
x = 3 y = 3 z = 3 print(all_equal(x, y, z)) # 输出: True w = 4 print(all_equal(x, y, w)) # 输出: False
给自定义类添加多实例比较方法
如果是自己定义的类,也可以在类里实现一个专属的多比较方法,配合已有的__eq__使用:
class Product: def __init__(self, price): self.price = price def __eq__(self, other): # 先判断类型,避免和其他类型对象误判 if not isinstance(other, Product): return False return self.price == other.price def equals_all(self, *others): return all(self == item for item in others) p1 = Product(29.9) p2 = Product(29.9) p3 = Product(29.9) print(p1.equals_all(p2, p3)) # 输出: True
内容的提问来源于stack exchange,提问作者python_noob
相关产品推荐
相关产品推荐

