Курс 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. Команда %dhist — список посещенных каталогов
  2. ChainMap.new_child() — добавление нового словаря
  3. Очистка данных с помощью pandas
  4. Обработка исключений в Python
  5. Измерение времени выполнения
  6. Регистрация на TenChat
  7. Логирование с Logzero
  8. Установка Git и AWS CLI
  9. Функция enumerate в Python
  10. Enum в Python: создание и использование перечислений
  11. Генераторы словарей и множеств
  12. Структура строк в Python
  13. Проверка на истинность объектов в Python
  14. Pillow: работа с изображениями
  15. Проверка типа объекта в Python
  16. Модуль Operator в Python
  17. Работа с библиотекой requests
  18. Лямбда-функции в Python
  19. Лямбда-функции для min/max
  20. Замена текста с re.sub()
  21. Замеры производительности в Python
  22. Форматирование строк в Python
  23. Оператор in и not in в Python
  24. JMESPath в Python
  25. Перемешивание списка с shuffle()
  26. Бинарный поиск
  27. Оператор is в Python
  28. Работа с байтовыми строками в Python
  29. Операторы сравнения в Python
  30. Метод join() для объединения элементов
  31. Генераторы в Python
  32. Комментарии в Python.
  33. Обновление ключей в Python
  34. Удаление ключей из словаря
  35. Конвертация коллекций в Python
  36. Печать в одной строке
  37. Список переменных с %who
  38. Разделение строки с помощью re.split()
  39. Асинхронный код в Python
  40. ROT13 Шифр Цезаря в Python
  41. Отношения подклассов в Python
  42. Руководство по использованию Colorama
  43. Распаковка аргументов в Python
  44. Подсчет частоты элементов с Counter
  45. Вывод переменной и строки в Python
  46. Пропуск строк в файле с itertools

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