我需要在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__()
不是set调用的方法。这叫什么?我还必须定义什么其他方法?
注意:Item
必须保持可变,并且可以更改,所以我不能提供__hash__()
方法。如果这是唯一的方法,那么我将重写以使用不可变的Item
__s。
https://stackoverflow.com/questions/3942303
复制相似问题