私が正しく理解していれば、オブジェクトがコレクションのメンバーであるか「in」であるかを判断しながら、コレクション内のすべてのオブジェクトを評価するために、オブジェクトの__cmp __()関数が呼び出されます。ただし、これはセットには当てはまらないようです。
class MyObject(object):
def __init__(self, data):
self.data = data
def __cmp__(self, other):
return self.data-other.data
a = MyObject(5)
b = MyObject(5)
print a in [b] //evaluates to True, as I'd expect
print a in set([b]) //evaluates to False
では、オブジェクトのメンバーシップはセットでどのようにテストされますか?