Курс 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. Метод rsub в Python: расширение функциональности вычитания
  2. Python: цикл for и оператор присваивания
  3. Функция enumerate() в Python
  4. enumerate() в Python для работы с индексами
  5. Избегайте использования goto
  6. Подсчет элементов в Python
  7. Декораторы с @wraps
  8. Фильтрация списка чисел
  9. Исключение NotImplementedError
  10. Создание уникального проекта
  11. Работа с датами в Python
  12. Список переменных в Python
  13. Лямбда-функции в defaultdict
  14. Импорт классов из другого файла
  15. Сортировка и разворот списка
  16. lru_cache оптимизация функций
  17. Обработка исключений с блоком else
  18. Метод rlshift для битового сдвига
  19. Многострочные комментарии в Python
  20. Передача аргументов в Python
  21. Списковые включения в Python
  22. Создание новых списков через list comprehensions
  23. Оператор Walrus в Python
  24. Закрытие файла в Python
  25. Работа с исключениями в Python
  26. Эффективная конкатенация строк в Python
  27. Генераторы словарей и множеств
  28. Преобразование Word в PDF с Spire.Doc
  29. Основы работы со списками
  30. Библиотека Chartify: руководство
  31. Глобальные переменные в Python
  32. Открытие, чтение и закрытие файла
  33. Создание циклической ссылки
  34. Сравнение def и lambda функций в Python
  35. Перехват исключений в Python
  36. Проверка версии Python
  37. Именованные аргументы в Python
  38. Изменение объектов в Python
  39. Получение текущего времени в Python
  40. Избегайте изменяемых аргументов
  41. Измерение времени выполнения кода с использованием time
  42. Сравнение неупорядоченных списков
  43. Оператор space-invader
  44. Оператор «not» в Python
  45. Установка Python3.7 и PIP
  46. Автоматизация действий с Pyautogui

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