Курс 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 Метод sleep() времени
- Переопределение метода __rshift__
- Enum в Python: создание и использование перечислений
- Методы работы со списками
- Область видимости переменных
- Метод join для объединения строк
- Декораторы классов
- Big O оптимизация
- Атрибуты класса и экземпляра
- Тернарный оператор в Python
- Работа с Path в Python
- Добавление кнопки в tkinter
- Создание списка через итерацию
- Обратный список чисел
- Функция sleep() в Python
- Объединение кортежей в Python
- Объединение множеств в Python
- Оператор объединения словарей
- Работа с часовыми поясами в Python.
- Создание итератора
- Оптимизация памяти с __slots__
- Работа с кортежами в Python
- Сериализация данных в JSON с помощью json.dumps
- Оптимизация гиперпараметров с Scikit Optimize
- Измерение времени выполнения кода
- Использование эмодзи в Python
- Условное добавление элементов в список
- Сериализация и десериализация объектов
- Нан-рефлексивность в Python
- Декораторы с аргументами в Python
- Обработка ошибок в Python
- Оператор in и not in в Python
- Печать комбинаций в Python с Itertools
- Декораторы в Python
- Избегайте двойного подчеркивания
- Python и Монти Пайтон
- Подсчет элементов в Python
- Ветвление выражения в Python
- Форматирование строк в Python.
- Создание коллекций из генератора
- Метод join() для объединения элементов в строку.
- Отображение HTML кода в Python
- Python OrderedDict и fromkeys() — работа с словарями
- Создание коллекций из выражения-генератора
- Функция findall() для поиска вхождений строки
- Переворот списка в Python















