gpt4 book ai didi

python - Python set([]) 如何检查两个对象是否相等?一个对象需要定义哪些方法来自定义它?

转载 作者:IT老高 更新时间:2023-10-28 21:34:48 26 4
gpt4 key购买 nike

我需要在 Python 中创建一个“容器”对象或类,它会记录我还定义的其他对象。此容器的一个要求是,如果两个对象被认为是相同的,则删除一个(其中一个)。我的第一个想法是使用 set([]) 作为包含对象,来完成这个要求。

但是,该集合不会删除两个相同的对象实例之一。我必须定义什么来创建一个?

这是 Python 代码。

class Item(object):
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
def __repr__(self):
return "Item(%s, %s)" % (self.foo, self.bar)
def __eq__(self, other):
if isinstance(other, Item):
return ((self.foo == other.foo) and (self.bar == other.bar))
else:
return False
def __ne__(self, other):
return (not self.__eq__(other))

口译员

>>> set([Item(1,2), Item(1,2)])
set([Item(1, 2), Item(1, 2)])

很明显,x == y调用的__eq__()并不是集合调用的方法。什么叫做?我还必须定义什么其他方法?

注意:Items 必须保持可变,并且可以更改,因此我无法提供 __hash__() 方法。如果这是唯一的方法,那么我将重写以使用不可变的 Items。

最佳答案

是的,您需要一个 __hash__() 方法和您已经提供的比较运算符。

class Item(object):
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
def __repr__(self):
return "Item(%s, %s)" % (self.foo, self.bar)
def __eq__(self, other):
if isinstance(other, Item):
return ((self.foo == other.foo) and (self.bar == other.bar))
else:
return False
def __ne__(self, other):
return (not self.__eq__(other))
def __hash__(self):
return hash(self.__repr__())

关于python - Python set([]) 如何检查两个对象是否相等?一个对象需要定义哪些方法来自定义它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3942303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com