set(list_of_objects) 重複が何であるかがわかっている場合、つまり、オブジェクトの一意性を定義する必要がある場合にのみ、重複が削除されます。
そのためには、オブジェクトをハッシュ可能にする必要があります。両方の__hash__を定義する必要があります および__eq__ メソッド、方法は次のとおりです:
https://docs.python.org/glossary.html#term-hashable
ただし、おそらく__eq__を定義するだけで済みます。 メソッド。
編集 :__eq__を実装する方法 方法:
前述したように、オブジェクトの一意性の定義を知る必要があります。組み合わせが一意である属性author_nameとtitleを持つBookがあるとします(したがって、Stephen Kingが作成した多くの本と、The Shiningという名前の本がたくさんありますが、StephenKingによるTheShiningという名前の本は1冊だけです)。は次のとおりです:
def __eq__(self, other):
return self.author_name==other.author_name\
and self.title==other.title
同様に、これは私が時々__hash__を実装する方法です 方法:
def __hash__(self):
return hash(('title', self.title,
'author_name', self.author_name))
同じ著者とタイトルの2冊の本のリストを作成すると、本のオブジェクトが同じになることを確認できます( 等しい(is 演算子)および== オペレーター)。また、set()の場合 を使用すると、1冊の本が削除されます。
編集 :これは私の古い答えの1つですが、最後の段落の取り消し線で修正されたエラーがあることに気づきました:同じhash()を持つオブジェクト Trueを与えません isと比較した場合 。ただし、オブジェクトのハッシュ可能性は、セットの要素として、または辞書のキーとして使用する場合に使用されます。