Курс 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"
- Модуль Antigravity в Python 3
- Python Метод del.
- Инвертирование словаря
- Извлечение данных из JSON
- Проверка запуска скрипта или импорта модуля
- TypedDict для kwargs в Python 3.12
- Особенности запятых в Python
- Работа с Requests для HTTP-запросов
- Модуль inspect
- Избегайте ошибку FileNotFoundError
- Прокачанный трейсинг ошибок
- Библиотека Emoji: использование смайлов в Python
- Глубокое копирование объектов
- Проблема с изменяемыми аргументами
- Работа с модулем glob в Python
- Принципы Zen Python
- Вычисление разности множеств в Python
- Поиск повторов в списке
- Резервирование символов в Python
- Создание коллекций из выражения-генератора
- Combobox в Tkinter
- Переопределение метода len
- Переменная Шредингера
- Добавление элементов в список: append() vs extend()
- Определение размера папок в Python
- Обход элементов в Python
- Работа с контекстными переменными
- Переопределение метода sub
- Сортировка HTML по CSS-селектору
- Метод title() в Python
- Работа с множествами в Python
- Создание пар из последовательностей
- Взаимодействие с внешними процессами в Python
- Работа с кортежами в Python
- Numpy: разбиение массивов
- Списковое включение в Python
- Возвращение нескольких значений через кортеж или класс
- Преобразование генераторов в циклы
- Экспорт данных с помощью writefile
- Оптимизация памяти с slots
- Открытие и редактирование скриптов Python
- Отправка POST-запроса в REST API















