Для произвольного объекта оператор ==
вернет true, только если два объекта являются одним и тем же объектом (т. Е. Если они ссылаются на один и тот же адрес в памяти).
Чтобы получить больше «сделанных на заказ»поведения, вы захотите переопределить операторы расширенного сравнения, в данном случае конкретно __eq__
.Попробуйте добавить это к своему классу:
def __eq__(self, other):
if self.param == other.param \
and self.param_2 == other.param_2 \
and self.param_3 == other.param_3:
return True
else:
return False
(сравнение всех параметров можно было бы провести здесь, но я оставил их для ясности).
Обратите внимание, что если параметры сами являются объектами, которые вы определили, эти объекты должны будут определить __eq__
аналогичным образом, чтобы это работало.
Еще один момент, на который следует обратить внимание: есливы пытаетесь сравнить объект FooBar с другим типом объекта, как я это делал выше, python попытается получить доступ к атрибутам param, param_2 и param_3 другого типа объекта, которые будут вызывать AttributeError.Вы, вероятно, захотите сначала проверить объект, с которым сравниваете, экземпляр FooBar с isinstance (other, FooBar).Это не сделано по умолчанию, так как могут быть ситуации, когда вы хотите вернуть True для сравнения между различными типами.
См. Ответ AJ для более простого способа сравнить все параметры, которые также не должны бросать атрибутошибка.
Для получения дополнительной информации о расширенном сравнении см. документы по питону .