Курс 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. Обработка исключения UnboundLocalError
  3. Компиляция регулярных выражений
  4. Работа с Event() в threading
  5. Управление контекстом выполнения кода
  6. Частичное совпадение пользовательского ввода в Python 3.10
  7. Уникальные значения из списка
  8. Логирование с Logzero
  9. Обработка StopIteration в Python
  10. Поиск подстроки в строке
  11. Функции all() и any() в Python
  12. Функция zip() для объединения списков
  13. Удаление элемента из списка в Python
  14. Отступы в Python
  15. Операторы += в Python
  16. Изменения в обработке логических значений
  17. Работа с временем в Python
  18. Документирование функций в Python
  19. Вывод символов строки в Python
  20. Создание комплексных чисел
  21. Роль запятой в Python
  22. Объединение словарей в Python
  23. Работа со случайными элементами
  24. Поиск анаграмм с Counter
  25. Переменные класса и экземпляра
  26. Перевод текста с Python Translator
  27. Манипуляция формой массива в Numpy
  28. Названия столбцов в Python таблицах
  29. Методы и функции в Python
  30. GitHub в Telegram: подписка на уведомления
  31. Поиск частых элементов в списке
  32. Очистка данных с Pandas
  33. Установка и использование библиотеки google
  34. Создание списка через цикл
  35. Распаковка элементов массива
  36. Оператор деления для класса Rational
  37. Открытие, чтение и закрытие файла
  38. Оболочка Python
  39. Декоратор защиты анонимных пользователей
  40. Декораторы в Python
  41. Класс Counter() для подсчета элементов
  42. Хешируемые ключи в Python
  43. Названия переменных
  44. Расчет времени выполнения
  45. Python Ellipsis использование
  46. Вывод букв строки в Python
  47. Виртуальное окружение Python
  48. Создание словарей с defaultdict

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