Элегантные способы поддержки эквивалентности («равенства») в классах Python

При написании пользовательских классов часто важно разрешить эквивалентность посредством== а также!= операторы. В 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__ не определены, вы найдете это поведение:

>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
False

То есть,a == b оцениваетFalse потому что это действительно работаетa is bтест личности (то естьa тот же объект, что иb? ").

когда__eq__ а также__ne__ определены, вы найдете это поведение (которое мы ищем):

>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
True

Ответы на вопрос(9)

Ваш ответ на вопрос