В python - оператор, который набор использует для проверки, находится ли объект в наборе

Если у меня есть список объектов, я могу использовать метод __ cmp __ для переопределения сравнения объектов. Это влияет на работу оператора == и на функцию в списке . Однако, похоже, это не влияет на элемент в функции набора - мне интересно, как я могу изменить объект MyClass, чтобы переопределить поведение, при котором набор сравнивает элементы.

Например, я хотел бы создать объект, который возвращает True в трех нижеследующих операторах печати. На данный момент последний оператор печати возвращает False.

class MyClass(object):
    def __init__(self, s):
        self.s = s
    def __cmp__(self, other):
        return cmp(self.s, other.s)

instance1, instance2 = MyClass("a"), MyClass("a")

print instance2==instance1             # True
print instance2 in [instance1]         # True
print instance2 in set([instance1])    # False
10
задан Benjamin 15 December 2013 в 00:03
поделиться