Курс 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"
- Сортировка с параметром key
- Переопределение метода __lshift__
- Объединение списков с использованием itertools.chain
- Модуль pprint
- Python 3.12: переиспользование кавычек
- GitHub в Telegram: подписка на уведомления
- Комплексные числа в Python
- Ускоренный импорт библиотек
- Множества и frozenset
- Измерение времени выполнения кода
- Декораторы в Python
- Проверка типов с использованием isinstance
- Транспонирование 2D-массива с помощью zip
- Объединение коллекций в Python
- Python Поверхностное Копирование
- Переопределение метода __eq__
- Python union() функция — объединение множеств
- Функции в Python
- Удаление файлов с shutil.os.remove()
- Преобразование генераторов в циклы
- Пропуск начальных строк с помощью dropwhile()
- Логирование с Loguru
- Отправка POST-запроса в REST API
- Оформление кода на Python
- Слияние словарей в Python 3.9
- Форматирование строк с % в Python
- Удаление элемента по индексу в Python
- Повторение и перенос строки
- Обработка аргументов Python
- Запуск асинхронной корутины
- Работа с enumerate()
- Присоединение элементов коллекции
- Тайное преобразование типа ключа
- Обработка исключений с блоком else
- Измерение времени выполнения кода
- Создание файла с проверкой ошибки
- Принципы программирования
- Анонимные функции в Python
- Комментарии в Python
- Сокращение ссылок с pyshorteners
- Активация Matplotlib в Jupyter
- Копирование и вставка текста в Python
- Преобразование букв в нижний регистр
- Создание веб-приложения с Flask
- Метод __complex__ в Python
- Проверка версии Python















