Курс Python → Отношения подклассов в Python
Отношения подклассов в Python могут быть не такими простыми, как кажется на первый взгляд. В языке Python отношения подклассов не всегда являются транзитивными, что означает, что если класс А наследует класс В, а класс В наследует класс С, то класс А не обязательно будет наследовать класс С.
В Python у каждого класса есть возможность определить свой собственный метод subclasscheck, который определяет, является ли данный класс подклассом другого класса. Например, при вызове функции issubclass(cls, Hashable) Python просто проверяет, есть ли у класса cls метод «hash» или он унаследован от другого класса.
Однако, иногда это может привести к неожиданным результатам. Например, класс object в Python является хешируемым (hashable), но класс list уже нет. Таким образом, при вызове issubclass(list, Hashable) результат будет False, что нарушает транзитивность отношений подклассов.
class Hashable:
def __hash__(self):
return hash(self)
class CustomList(Hashable):
pass
print(issubclass(CustomList, Hashable)) # Output: True
class MyList(list):
pass
print(issubclass(MyList, Hashable)) # Output: False
В приведенном выше примере мы определили класс Hashable с методом __hash__, который делает объекты этого класса хешируемыми. Затем мы создали класс CustomList, который наследуется от Hashable, и класс MyList, который наследуется от стандартного класса list. Как видно из результатов, CustomList является подклассом Hashable, в то время как MyList не является хешируемым.
Другие уроки курса "Python"
- Beautiful Soup — извлечение данных из HTML
- Инверсия списка и строки в Python
- Оптимизация поиска в словарях
- Функция count() в Python
- Создание и инициализация объектов
- Использование функции enumerate()
- Исключение NotImplementedError
- Переворот строки с помощью срезов
- Python Метод del.
- Модуль os в Python: работа с файлами
- Аннотации типов в Python
- Создание лямбда-функций
- Сортировка с помощью параметра key
- Управление фоновыми задачами в Python
- Использование подчеркивания в REPL
- Тип данных TypeVarTuple
- Отрицательные индексы списков в Python
- Блок else в Python
- Документирование функций в Python
- Работа с файлами в Python
- Транспонирование матрицы в Python
- Операции с кортежами
- Получение текущего времени в Python
- Проверка переменных окружения в Python
- Просмотр атрибутов и методов класса
- Преобразование числа в список цифр
- Лямбда-функции в defaultdict
- Перемещение и удаление файлов в Python
- Python: возвращение нескольких значений
- Метод split() для разделения строк
- GitHub в Telegram: подписка на уведомления
- Рекурсия для обращения строки
- Анонимные функции Lambda
- Функция с *args.
- Обмен значений переменных в Python
- Python UserString — создание подклассов строк
- Объединение списков в строку
- Фильтрация списка от «ложных» значений
- Поиск самого длинного слова в списке с использованием max()
- Howdoi — получение ответов из терминала
- Логические операторы в Python
- Подсчет элементов в списке с Counter
- Генераторы данных
- Именованные срезы в Python
- Обмен данными с asyncio.Queue
- Сортировка с помощью key
- Создание детектора плагиата















