Язык программирования Python

Как сравнивать объекты в Python

В этой статье о классах и объектах в языке Python я покажу вам, как сравнивать объекты.

Давайте переопределим метод  __eq__  класса, чтобы мы могли использовать операторы сравнения типа ==, позволяющие узнать, одинаковы ли два объекта.

Сравнение объектов в Python

Проще всего было бы написать функцию объекта, которая получает другой объект, и вызвать ее вручную. Например:

if obj.is_equal_to(other_obj):
Code language: CSS (css)

Но мы можем сделать это более элегантно, переопределив метод из класса:

if obj == other_obj:

Это также будет работать с оператором  in :

if obj in my_list_of_obj:

Определение класса

Мы собираемся задать наш класс обычным образом, но при этом мы определим метод  __eq__ . Этот метод получает текущий объект и объект, с которым его нужно сравнить. Мы должны вернуть  True  или  False , указывающие, является ли объект тем же самым, что и другой объект.

Разумеется, сравнение должно быть выполнено нами. В основном мы говорим, что объект равен другому объекту, если все его свойства равны. Но если вы хотите добавить дополнительные условия, вы можете это сделать.

class Game: def __init__(self, name, price): self.name = name self.price = price def __eq__(self, other_game): # Здесь вы можете сравнить что-либо из двух объектов. Вам должно быть возвращено булево значение print("Обращение к __eq__!") return other_game.name == self.name and other_game.price == self.price

В данном случае я определяю класс, представляющий игру, у которой есть название и цена. Переопределяя метод  __eq__ , я сравниваю, совпадают ли название и цена.

Помимо этого, я также вывожу сообщение, чтобы мы знали, когда этот метод будет вызван. Опять же, если вам нужно сравнить больше параметров, вы можете это сделать, просто возвращайте булево значение в конце.

Сравнение объектов

Итак, теперь, когда мы определили функцию, которая будет определять, являются ли два экземпляра одинаковыми в Python, мы можем ее использовать. Сначала мы создадим объекты, а затем сравним их:

game1 = Game("Cuphead", 180) game2 = Game("Cuphead", 180) game3 = Game("Resident Evil 2", 430) if game1 == game2: print("Они одинаковые") else: print("Они НЕ одинаковые") if game1 != game3: print("game 1 и game 3 - это НЕ одинаковые") else: print("game 1 и game 3 - это одинаковые")
Code language: PHP (php)

Как видно на изображении выше, когда мы используем  == , Python вызывает внутренний метод  __eq__ , поэтому мы перезаписываем сравниваемые параметры.

Таким образом, мы можем сравнивать объекты любого типа. На самом деле, если внутри нашего класса у нас есть свойство, которое само является объектом, и мы правильно определим  __eq__ , то сможем рекурсивно сравнивать объекты, внутри которых есть объекты.

Собираем все вместе

Полный код выглядит следующим образом.

class Game: def __init__(self, name, price): self.name = name self.price = price def __eq__(self, other_game): # Здесь вы можете сравнить что-либо из двух объектов. Вам должно быть возвращено булево значение print("Обращение к __eq__!") return other_game.name == self.name and other_game.price == self.price game1 = Game("Cuphead", 180) game2 = Game("Cuphead", 180) game3 = Game("Resident Evil 2", 430) if game1 == game2: print("Они одинаковые") else: print("Они НЕ одинаковые") if game1 != game3: print("game 1 и game 3 - это НЕ одинаковые") else: print("game 1 и game 3 - это одинаковые")

Кстати, кроме  __eq__ , который показывает, равны ли два объекта, есть и другие методы, такие как  __le__ ,  __gt__  и т.д. (меньше или больше и т.д.).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *