Курс 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
- Блок else в циклах Python
- Удаление специальных символов с помощью re.sub
- JMESPath в Python
- Оптимизация памяти в Python
- Освобождение памяти в Python
- Наследование в программировании
- Метод is_absolute() для PurePath
- Создание словарей с defaultdict()
- Поиск HTML-элементов с BeautifulSoup
- Метод init в Python
- Создание копии итератора
- Пропуск строк в файле с itertools
- Парсинг веб-страниц с Beautiful Soup
- Хэш-функции в Python
- Работа с итераторами через срезы
- Форматирование строк в Python
- Генераторы данных
- Замена элементов в списке с помощью генераторов списков
- Работа с модулем glob в Python
- lru_cache оптимизация функций
- Оператор «моржа» (Walrus Operator)
- Работа с NumPy массивами
- Генераторы в Python
- Перевод двоичного кода в целое число
- Декораторы в Python
- IPython и Jupyter Notebook: руководство
- Переопределение оператора % для объектов
- Область видимости переменных
- Уникальность ключей в словаре
- Операции с кортежами
- Проверка существования переменной с оператором :=
- Обмен значений переменных в Python
- Декоратор Ajax required
- Строковое представление объектов
- Многоточие в Python
- Python Ellipsis использование
- Закрытие файла в Python
- Декораторы в Python
- Python Метод del.
- Создание коллекций из генератора
- Модуль array: создание и использование массивов
- Мониторинг памяти с Pympler
- Генерация тестовых данных с factory_boy















