Курс 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
  2. Оператор объединения словарей
  3. Различия символов в Python
  4. Использование двоеточия в Python
  5. IPython и Jupyter Notebook: руководство
  6. Выражения-генераторы в Python
  7. Поиск индексов подстроки
  8. Pillow: работа с изображениями
  9. Повторение элементов в Python
  10. Функции в Python: создание и вызов
  11. Проверка строки на палиндром
  12. Обработка исключений в Python
  13. Вывод переменной и строки в Python
  14. Объединение словарей в Python 3.5+
  15. Метод join() для объединения строк
  16. JMESPath в Python
  17. Использование подчеркивания в REPL
  18. Рекурсия для обращения строки
  19. Оператор Walrus в Python 3.8
  20. Декораторы с аргументами в Python
  21. Сравнение строк в Python
  22. Разделение строки с помощью re.split()
  23. Метод rsub в Python: расширение функциональности вычитания
  24. None в Python: использование и особенности
  25. Преобразование строк в числа с плавающей запятой
  26. Python enumerate() использование
  27. Модуль array: создание и использование массивов
  28. Работа с очередями в Python
  29. Mad Libs Generator
  30. Управление виртуальными средами в Python
  31. Добавление вложенных списков
  32. Установка и использование pyshorteners
  33. Построение графиков в терминале с bashplotlib
  34. Создание вкладок с TKinter
  35. Форматирование кода на Python
  36. Комментарии в Python
  37. Итераторы с потерямиZIP
  38. Оператор умножения для вектора
  39. Явный импорт в Python
  40. Разделение строк в Python
  41. Генераторы в Python
  42. split() без разделителя

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