Курс 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. Импорт в Python: список all
  2. Метод Self в Python
  3. Работа со словарями
  4. Метод add для класса Vector
  5. Создание комплексных чисел
  6. Метод repr() в Python
  7. Работа с кортежами в Python
  8. Поиск индекса элемента
  9. Модуль itertools: эффективная работа с итераторами
  10. Проверка элементов списка условием
  11. Оформление кода по PEP 8
  12. Методы обработки строк в Python
  13. Чтение бинарного файла в Python.
  14. Обновление и получение данных в SQLite
  15. Распаковка аргументов в Python
  16. Сортировка HTML по CSS-селектору
  17. Методы HTTP запросов в Flask
  18. Оператор Walrus в Python
  19. Генераторы в Python
  20. Установка User-Agent в Python
  21. Установка библиотек в Python
  22. PATCH-запрос с библиотекой requests
  23. Управление ресурсами в Python
  24. Переопределение оператора % для объектов
  25. Создание и использование ChainMap
  26. Таймер обратного отсчета
  27. Объединение списков с помощью zip
  28. Flask: создание веб-приложений
  29. Генераторы списков в Python
  30. Функция zip() в Python
  31. Поиск файлов по шаблону
  32. Перебор элементов списка в Python
  33. Python 3.12: переиспользование кавычек
  34. Защита данных в Python
  35. Установка и использование библиотеки google
  36. Работа с deque из collections
  37. Хеширование паролей с солью
  38. Создание OrderedDict
  39. Разделение функций на этапы
  40. Операторы присваивания в Python
  41. Метод округления чисел
  42. Необязательные аргументы в Python
  43. HTTP-запросы с библиотекой Requests
  44. Метод get для словаря
  45. Объединение Python и Shell

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