В Python термин «переопределение равенства» обычно относится к переопределению операторов сравнения равенства (==и !=) для пользовательских объектов. Таким образом, вы можете определить свою собственную логику, определяющую, когда два объекта считаются равными. Вот несколько методов, которые можно использовать для достижения этой цели:
-
__eq__(self, Other): этот метод используется для переопределения оператора сравнения на равенство==. Он принимает два аргумента:self(представляющий текущий объект) иother(представляющий сравниваемый объект). Он должен возвращатьTrue, если объекты считаются равными, иFalseв противном случае. -
__ne__(self, Other): этот метод используется для переопределения оператора сравнения неравенств!=. Он работает аналогично__eq__, но должен возвращатьTrue, если объекты не равны, иFalseв противном случае. -
__hash__(self): этот метод используется для переопределения хеш-функции по умолчанию для объектов. Необходимо определить собственный метод__hash__, если вы переопределяете__eq__, чтобы обеспечить согласованное поведение при использовании объектов в качестве ключей в словарях или элементов в наборах.
Вот пример, демонстрирующий использование этих методов:
class MyClass:
def __init__(self, value):
self.value = value
def __eq__(self, other):
if isinstance(other, MyClass):
return self.value == other.value
return False
def __ne__(self, other):
return not self.__eq__(other)
def __hash__(self):
return hash(self.value)
# Usage
obj1 = MyClass(10)
obj2 = MyClass(10)
print(obj1 == obj2) # Output: True
print(obj1 != obj2) # Output: False
, ne, хеш