Курс 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"
- Удаление файлов с shutil.os.remove()
- Метод hash в Python
- Профилирование данных с Pandas
- Конкатенация строк с join() в Python
- Использование модуля math
- Удаление и повторная вставка ключа в OrderedDict
- Определение объема памяти объекта
- Названия столбцов в Python таблицах
- Переопределение метода __and__
- Установка и использование модуля Wikipedia
- Преобразование символов в нижний регистр
- Различия символов в Python
- Подсчет элементов в Python
- Методы __repr__ и __str__ в Python
- Декораторы с @wraps
- Функция product() в Python
- Работа с deque из collections
- Конвертация коллекций в Python.
- Печать комбинаций в Python с Itertools
- Изучение объектов с помощью dir()
- Подсказки при вводе данных в Python
- Преобразование строк в числа в Python
- Копирование файлов с shutil()
- Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
- Генерация чисел с range()
- Измерение времени выполнения кода
- Объединение словарей в Python 3.5+
- Нахождение пересечения множеств
- Форматирование данных с pprint
- Объединение списков в Python
- Использование html-скриптов в Jupyter Notebook
- Частичное совпадение пользовательского ввода в Python 3.10
- Объединение коллекций в Python
- Создание namedtuple списком полей
- Работа с типами данных в Python с помощью pydantic.
- Распаковка аргументов в Python
- Поиск элементов BeautifulSoup
- Генерация случайных чисел в Python
- Проверка на истинность объектов в Python
- Установка и загрузка Instaloader
- Зарезервированные слова в Python
- Создание словаря в Python
- Форматирование даты с strftime()
- Применение промокода в Много лосося
- split() без разделителя















