Курс 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"
- Импорт в Python: список all
- Метод Self в Python
- Работа со словарями
- Метод add для класса Vector
- Создание комплексных чисел
- Метод repr() в Python
- Работа с кортежами в Python
- Поиск индекса элемента
- Модуль itertools: эффективная работа с итераторами
- Проверка элементов списка условием
- Оформление кода по PEP 8
- Методы обработки строк в Python
- Чтение бинарного файла в Python.
- Обновление и получение данных в SQLite
- Распаковка аргументов в Python
- Сортировка HTML по CSS-селектору
- Методы HTTP запросов в Flask
- Оператор Walrus в Python
- Генераторы в Python
- Установка User-Agent в Python
- Установка библиотек в Python
- PATCH-запрос с библиотекой requests
- Управление ресурсами в Python
- Переопределение оператора % для объектов
- Создание и использование ChainMap
- Таймер обратного отсчета
- Объединение списков с помощью zip
- Flask: создание веб-приложений
- Генераторы списков в Python
- Функция zip() в Python
- Поиск файлов по шаблону
- Перебор элементов списка в Python
- Python 3.12: переиспользование кавычек
- Защита данных в Python
- Установка и использование библиотеки google
- Работа с deque из collections
- Хеширование паролей с солью
- Создание OrderedDict
- Разделение функций на этапы
- Операторы присваивания в Python
- Метод округления чисел
- Необязательные аргументы в Python
- HTTP-запросы с библиотекой Requests
- Метод get для словаря
- Объединение Python и Shell















