Курс 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
- Оператор объединения словарей
- Различия символов в Python
- Использование двоеточия в Python
- IPython и Jupyter Notebook: руководство
- Выражения-генераторы в Python
- Поиск индексов подстроки
- Pillow: работа с изображениями
- Повторение элементов в Python
- Функции в Python: создание и вызов
- Проверка строки на палиндром
- Обработка исключений в Python
- Вывод переменной и строки в Python
- Объединение словарей в Python 3.5+
- Метод join() для объединения строк
- JMESPath в Python
- Использование подчеркивания в REPL
- Рекурсия для обращения строки
- Оператор Walrus в Python 3.8
- Декораторы с аргументами в Python
- Сравнение строк в Python
- Разделение строки с помощью re.split()
- Метод rsub в Python: расширение функциональности вычитания
- None в Python: использование и особенности
- Преобразование строк в числа с плавающей запятой
- Python enumerate() использование
- Модуль array: создание и использование массивов
- Работа с очередями в Python
- Mad Libs Generator
- Управление виртуальными средами в Python
- Добавление вложенных списков
- Установка и использование pyshorteners
- Построение графиков в терминале с bashplotlib
- Создание вкладок с TKinter
- Форматирование кода на Python
- Комментарии в Python
- Итераторы с потерямиZIP
- Оператор умножения для вектора
- Явный импорт в Python
- Разделение строк в Python
- Генераторы в Python
- split() без разделителя















