Курс 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"
- Сортировка HTML-элементов
- Применение функции к элементам списка
- Библиотека funcy: удобные утилиты
- Работа с функцией next() в Python
- Поиск индексов подстроки
- Декораторы в Python
- Операторы увеличения и уменьшения в Python
- Создание словаря в Python
- Проверка кортежей.
- Создание уникального множества
- Отображение HTML кода в Python
- Тип данных TypeVarTuple
- Метод __call__ в Python
- Поиск самого длинного слова в списке с использованием max()
- Работа с collections в Python.
- Метод rmatmul для обратного матричного умножения
- Работа со словарями в Python
- Тестирование модели в PyTorch
- Экспорт данных в файл.
- Работа с каталогами в Python
- Генератор надежных паролей
- Работа с argparse
- Python 3.12: переиспользование кавычек
- Порядок и длина множеств в Python
- Генерация QR-кодов с Python
- Создание копии списка в Python
- Подсчет элементов в Python
- Переменная с нижним подчеркиванием
- Разделение списка на гнппы
- Добавление Progressbar в Python
- Создание namedtuple списком полей
- Удаление символа из строки
- Python Enumerate
- Перемещение и удаление файлов в Python
- Преобразование строки в число
- Хранение переменных в Python.
- Python Менеджер контекста
- Модуль pprint
- Методы HTTP запросов в Flask
- Оболочка Python
- Перетасовка списков в Python
- Многострочные строки в Python
- Работа с путями в Python
- UserString в Python
- Метод difference_update() — разность множеств















