все Python 3ООПфункция
__eq__
магические методы
Метод оператора ==. Без него объекты равны, только если это один и тот же объект, как для is.
Синтаксис
def __eq__(self, other): ...
Определив __eq__, класс теряет __hash__: его экземпляры больше нельзя класть в set и делать ключами dict, пока не определён и __hash__ — согласованный с равенством. != Python 3 выводит сам, инвертируя __eq__. Для чужого типа возвращают NotImplemented, а не False: тогда Python спросит второй операнд.
Примеры
class Point:
def __init__(self, x, y):
self.x, self.y = x, y
def __eq__(self, other):
if not isinstance(other, Point):
return NotImplemented
return (self.x, self.y) == (other.x, other.y)
print(Point(1, 2) == Point(1, 2)) # → True
print(Point(1, 2) != Point(3, 4)) # → True — != выведен из __eq__
print(Point.__hash__) # → None — без __hash__ в set не положить
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности