Курс 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. Блок else в циклах Python
  3. Удаление специальных символов с помощью re.sub
  4. JMESPath в Python
  5. Оптимизация памяти в Python
  6. Освобождение памяти в Python
  7. Наследование в программировании
  8. Метод is_absolute() для PurePath
  9. Создание словарей с defaultdict()
  10. Поиск HTML-элементов с BeautifulSoup
  11. Метод init в Python
  12. Создание копии итератора
  13. Пропуск строк в файле с itertools
  14. Парсинг веб-страниц с Beautiful Soup
  15. Хэш-функции в Python
  16. Работа с итераторами через срезы
  17. Форматирование строк в Python
  18. Генераторы данных
  19. Замена элементов в списке с помощью генераторов списков
  20. Работа с модулем glob в Python
  21. lru_cache оптимизация функций
  22. Оператор «моржа» (Walrus Operator)
  23. Работа с NumPy массивами
  24. Генераторы в Python
  25. Перевод двоичного кода в целое число
  26. Декораторы в Python
  27. IPython и Jupyter Notebook: руководство
  28. Переопределение оператора % для объектов
  29. Область видимости переменных
  30. Уникальность ключей в словаре
  31. Операции с кортежами
  32. Проверка существования переменной с оператором :=
  33. Обмен значений переменных в Python
  34. Декоратор Ajax required
  35. Строковое представление объектов
  36. Многоточие в Python
  37. Python Ellipsis использование
  38. Закрытие файла в Python
  39. Декораторы в Python
  40. Python Метод del.
  41. Создание коллекций из генератора
  42. Модуль array: создание и использование массивов
  43. Мониторинг памяти с Pympler
  44. Генерация тестовых данных с factory_boy

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