Если у меня есть список объектов, я могу использовать метод __cmp__
для переопределения объектов сравнения.Это влияет на работу оператора ==
и функцию item in list
.Однако это, похоже, не влияет на функцию item in set
- мне интересно, как я могу изменить объект MyClass, чтобы я мог переопределить поведение, как набор сравнивает элементы.
Например, я бынравится создавать объект, который возвращает True в трех операторах печати внизу.На данный момент последний оператор print возвращает 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