Курс 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"
- Метод join() с набором
- Копирование в Python
- Работа с IP-адресами в Python
- Объединение словарей в Python
- Удаление символа из строки
- Сравнение строк в Python
- Тайное преобразование типа ключа
- Изменяемые и неизменяемые объекты
- Настройка нарезки списков
- Хеши в Python
- Печать календаря в Python
- Dict Comprehension в Python
- Курсы Яндекс Практикум
- Работа с датой и временем в Python
- Перевод двоичного кода в целое число
- Удаление ключей из словаря
- Мониторинг памяти с Pympler
- Работа с defaultdictами в Python
- Python enumerate() использование
- Удаление элементов из списка в Python
- Работа с комбинациями в Python.
- Метод pos в Python
- Операторы сравнения в Python
- Функция zip() в Python
- Метод ne для сравнения объектов
- Построение графиков в Matplotlib
- Метод classmethod
- Python Аргументы по умолчанию
- Тестирование модели в PyTorch
- Открытие и редактирование скриптов Python
- Строки в Python: апострофы и кавычки
- Переменная Шредингера
- Рекурсия для обращения строки
- Отладчик pdb: начало работы
- Beautiful Soup — извлечение данных из HTML
- Установка и использование howdoi
- Оценка точности модели
- Генерация чисел с range()
- Работа с OpenCV
- Сортировка HTML по CSS-селектору
- Функция findall() для поиска вхождений строки
- Глобальные переменные в Python
- Установка и использование Virtualenv















