object.__eq__
Позволяет реализовать проверку на равенство для экземпляров пользовательских типов.
object.__eq__(self, other)
self -- Ссылка на экземпляр.
other -- Объект с которым следует произвести сравнение (справа от оператора сравнения).
other -- Объект с которым следует произвести сравнение (справа от оператора сравнения).
Метод для реализации «богатого» сравнения. eq от англ. «equal» — равно.
Метод может возбудить исключение NotImplemented, если сравнение для указанной пары аргументов не реализовано.
В соответствии с договорённостью в случае успешного сравнения возвращает
+py3.4 По умолчанию object.__ne__() делегирует управление данному методу, инвертируя результат, если только не было поднято NotImplemented.
-py3.4 Между различными операторами сравнения нет подразумеваемых взаимосвязей. Так истинность
Не существует «перевёрнутых» методов, которые могли бы использоваться автоматически, если левый аргумент не поддерживает вызванную операцию, а правый поддерживает. Вместо этого обычно считают зеркальными
Для получения дополнительной важной информации об использовании «богатого сравнения» при создании объектов, поддерживающих хеширование, которые могут использоваться в качестве ключей в словарях смотрите object.__hash__().
Метод может возбудить исключение NotImplemented, если сравнение для указанной пары аргументов не реализовано.
В соответствии с договорённостью в случае успешного сравнения возвращает
True
, либо False
. Однако, может возвращать и любое другое значение, таким образом, если результат сравнения будет использован в контексте Булева типа (например в условии if
), Питон произведёт вызов bool() для интерпретации данного значения. class Moon:
def __eq__(self, other):
print('moon eq')
return self is other
class Earth:
def __eq__(self, other):
print('earth eq')
return self is other
my_moon = Moon()
my_earth = Earth()
is_eq = (my_moon == my_earth) # moon eq
is_eq # False
is_eq = (my_earth == my_moon) # earth eq
is_eq # False
is_eq = (my_earth == my_earth) # earth eq
is_eq # True
+py3.4 По умолчанию object.__ne__() делегирует управление данному методу, инвертируя результат, если только не было поднято NotImplemented.
-py3.4 Между различными операторами сравнения нет подразумеваемых взаимосвязей. Так истинность
(x< y or x==y)
не подразумевает x<=y
. Поэтому, при определении __eq__()
также необходимо определить и object.__ne__() для того чтобы операторы вели себя ожидаемым образом. Не существует «перевёрнутых» методов, которые могли бы использоваться автоматически, если левый аргумент не поддерживает вызванную операцию, а правый поддерживает. Вместо этого обычно считают зеркальными
__eq__()
и __ne__()
. +py3.4 Если операнды имеют различные типы и тип правого операнда является прямым или косвенным наследником типа левого операнда о метод-отражение правого операнда имеет приоритет, в иных случаях приоритет остаётся у метода левого операнда. При этом виртуальное наследование не учитывается.На заметку
Для автоматического генерирования операций упорядочивания по единой базовой операции можно использовать
functools.total_ordering()
.Для получения дополнительной важной информации об использовании «богатого сравнения» при создании объектов, поддерживающих хеширование, которые могут использоваться в качестве ключей в словарях смотрите object.__hash__().
Синонимы поиска: object.__eq__, object, __eq__, равно, равенство, ==
В разделе «object (объект)»:
file (файл)
object.__add__
object.__bool__
object.__call__
object.__ceil__
object.__class__
object.__cmp__
object.__contains__
object.__copy__
object.__deepcopy__
object.__del__
object.__delattr__
object.__delete__
object.__delitem__
object.__delslice__
object.__dir__
object.__enter__
object.__exit__
object.__floor__
object.__format__
object.__ge__
object.__get__
object.__getattr__
object.__getattribute__
object.__getitem__
object.__getslice__
object.__getstate__
object.__gt__
object.__hash__
object.__init__
object.__init_subclass__
object.__iter__
object.__le__
object.__len__
object.__lt__
object.__missing__
object.__ne__
object.__new__
object.__next__
object.next
object.__nonzero__
object.__qualname__
object.__rcmp__
object.__repr__
object.__reversed__
object.__set__
object.__setattr__
object.__setitem__
object.__set_name__
object.__setslice__
object.__setstate__
object.__slots__
object.__str__
object.__sub__
object.__subclasses__
object.__unicode__
property (свойство)
Protocols (протоколы)
slice (срез)
Встроенные исключения
На заметку
Зарегистрированные пользователи могут публиковать свои мнения относительно Книг, Видео, Статей других авторов и прочего в разделе Обсуждений.