Курс Python → Тайное преобразование типа ключа

В Python существует механизм, который называется «таинственное преобразование типа ключа». Это означает, что если вы создаете объект SomeClass с аргументом «s» и используете его как ключ в словаре, то это будет эквивалентно использованию строки «s» в качестве ключа. Это происходит потому, что класс SomeClass унаследовал метод hash от класса str, что позволяет использовать объект SomeClass в качестве ключа в словаре.

Кроме того, когда вы сравниваете объект SomeClass(«s») с строкой «s», результат будет True. Это происходит потому, что класс SomeClass также унаследовал метод eq от класса str, что позволяет сравнивать объекты SomeClass с строками. Таким образом, выражение SomeClass(«s») == «s» будет оценено как True.

Пример кода:


class SomeClass:
    def __init__(self, value):
        self.value = value

    def __eq__(self, other):
        return self.value == other

    def __hash__(self):
        return hash(str(self.value))

# Создание объекта SomeClass с аргументом "s"
obj = SomeClass("s")

# Использование объекта SomeClass в качестве ключа в словаре
d = {obj: "value"}

# Проверка эквивалентности объекта SomeClass и строки "s"
print(obj == "s")  # True

В данном примере мы создаем класс SomeClass с методами eq и hash, которые позволяют использовать объекты этого класса в качестве ключей в словаре и сравнивать их с обычными строками. Это демонстрирует «таинственное преобразование типа ключа» в Python и показывает, как можно использовать объекты пользовательского класса в различных контекстах.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Модуль Antigravity в Python 3
  2. Python Метод del.
  3. Инвертирование словаря
  4. Извлечение данных из JSON
  5. Проверка запуска скрипта или импорта модуля
  6. TypedDict для kwargs в Python 3.12
  7. Особенности запятых в Python
  8. Работа с Requests для HTTP-запросов
  9. Модуль inspect
  10. Избегайте ошибку FileNotFoundError
  11. Прокачанный трейсинг ошибок
  12. Библиотека Emoji: использование смайлов в Python
  13. Глубокое копирование объектов
  14. Проблема с изменяемыми аргументами
  15. Работа с модулем glob в Python
  16. Принципы Zen Python
  17. Вычисление разности множеств в Python
  18. Поиск повторов в списке
  19. Резервирование символов в Python
  20. Создание коллекций из выражения-генератора
  21. Combobox в Tkinter
  22. Переопределение метода len
  23. Переменная Шредингера
  24. Добавление элементов в список: append() vs extend()
  25. Определение размера папок в Python
  26. Обход элементов в Python
  27. Работа с контекстными переменными
  28. Переопределение метода sub
  29. Сортировка HTML по CSS-селектору
  30. Метод title() в Python
  31. Работа с множествами в Python
  32. Создание пар из последовательностей
  33. Взаимодействие с внешними процессами в Python
  34. Работа с кортежами в Python
  35. Numpy: разбиение массивов
  36. Списковое включение в Python
  37. Возвращение нескольких значений через кортеж или класс
  38. Преобразование генераторов в циклы
  39. Экспорт данных с помощью writefile
  40. Оптимизация памяти с slots
  41. Открытие и редактирование скриптов Python
  42. Отправка POST-запроса в REST API

Marketello читают маркетологи из крутых компаний