Pythonで「コンテナ」オブジェクトまたはクラスを作成する必要があります。これは、私が定義した他のオブジェクトの記録を保持します。このコンテナの要件の1つは、2つのオブジェクトが同一であると見なされた場合、1つ(いずれか1つ)が削除されることです。私が最初に考えたのはset([])
、この要件を満たすために、を含むオブジェクトとしてを使用することでした。
ただし、セットは2つの同一のオブジェクトインスタンスの1つを削除しません。作成するには何を定義する必要がありますか?
これが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)])
__eq__()
によって呼び出されるx == y
、が集合によって呼び出されるメソッドではないことは明らかです。何と呼ばれていますか?他にどのような方法を定義する必要がありますか?
注:Item
sは変更可能である必要があり、変更される可能性があるため、メソッドを提供できません__hash__()
。これがそれを行う唯一の方法である場合、不変Item
のを使用するために書き直します。