Курс 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. Python Метод sleep() времени
  3. Переопределение метода __rshift__
  4. Enum в Python: создание и использование перечислений
  5. Методы работы со списками
  6. Область видимости переменных
  7. Метод join для объединения строк
  8. Декораторы классов
  9. Big O оптимизация
  10. Атрибуты класса и экземпляра
  11. Тернарный оператор в Python
  12. Работа с Path в Python
  13. Добавление кнопки в tkinter
  14. Создание списка через итерацию
  15. Обратный список чисел
  16. Функция sleep() в Python
  17. Объединение кортежей в Python
  18. Объединение множеств в Python
  19. Оператор объединения словарей
  20. Работа с часовыми поясами в Python.
  21. Создание итератора
  22. Оптимизация памяти с __slots__
  23. Работа с кортежами в Python
  24. Сериализация данных в JSON с помощью json.dumps
  25. Оптимизация гиперпараметров с Scikit Optimize
  26. Измерение времени выполнения кода
  27. Использование эмодзи в Python
  28. Условное добавление элементов в список
  29. Сериализация и десериализация объектов
  30. Нан-рефлексивность в Python
  31. Декораторы с аргументами в Python
  32. Обработка ошибок в Python
  33. Оператор in и not in в Python
  34. Печать комбинаций в Python с Itertools
  35. Декораторы в Python
  36. Избегайте двойного подчеркивания
  37. Python и Монти Пайтон
  38. Подсчет элементов в Python
  39. Ветвление выражения в Python
  40. Форматирование строк в Python.
  41. Создание коллекций из генератора
  42. Метод join() для объединения элементов в строку.
  43. Отображение HTML кода в Python
  44. Python OrderedDict и fromkeys() — работа с словарями
  45. Создание коллекций из выражения-генератора
  46. Функция findall() для поиска вхождений строки
  47. Переворот списка в Python

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