При написании пользовательских классов часто бывает важно разрешить эквивалентность с помощью операторов == и !=. В Python это стало возможным благодаря реализации специальных методов __eq__ и __ne__. Самый простой способ, который я нашел для этого, - это следующий метод:
class Foo:
def __init__(self, item):
self.item = item
def __eq__(self, other):
if isinstance(other, self.__class__):
return self.__dict__ == other.__dict__
else:
return False
def __ne__(self, other):
return not self.__eq__(other)
Знаете ли вы более элегантные средства для этого? Знаете ли вы какие-либо особые недостатки в использовании вышеуказанного метода сравнения __dict__ s?
Примечание: немного уточнения - когда __eq__ и __ne__ являются undefined, вы найдете это поведение:
>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
False
То есть a == b оценивается как False, потому что он действительно запускает a is b, тест идентичности (т.е. "Is a тот же объект, что и b?" ).
Когда определены __eq__ и __ne__, вы найдете это поведение (это то, за которым мы после):
>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
True