Курс 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"

  1. Инвертирование словаря
  2. Генераторы списков в Python
  3. Управление импортом в Python
  4. Работа с временем в Python
  5. Таймер обратного отсчета
  6. Проверка вхождения подстроки
  7. Сортировка элементов в Python
  8. Проверка кортежей.
  9. Профилирование с cProfile
  10. Создание Telegram-бота на Python
  11. Вложенные генераторы в Python
  12. Python enumerate() использование
  13. Работа с библиотекой xkcd
  14. Шаблоны Flask: условия и циклы
  15. Работа с индексами списков
  16. Списковое включение в Python
  17. Преобразование текста в нижний регистр
  18. Метод округления чисел
  19. Объединение словарей в Python 3.5+
  20. Форматирование чисел в Python
  21. Декораторы в Python
  22. Основные операции с Numpy
  23. Выход из профиля в Django
  24. Метод join() для объединения элементов строки
  25. Работа с исключениями в Python
  26. Создание даты из строки ISO
  27. Python: динамическая типизация и проверка типов
  28. Объединение словарей в Python
  29. Преобразование строк в числа с плавающей запятой
  30. Управление сессиями в Python
  31. Проверка условий: all и any
  32. Отправка HTTP-запросов в Python
  33. Параллельные вычисления в Python
  34. Непрерывная проверка в Python
  35. GitHub в Telegram: подписка на уведомления
  36. Подчеркивание в REPL
  37. Удаление знаков препинания в Python
  38. Библиотека Chartify: руководство
  39. Создание коллекций из выражения-генератора
  40. Python и Монти Пайтон
  41. Вывод символов строки в Python
  42. Основы работы со списками
  43. Присвоение значений переменным в Python
  44. Модуль antigravity: генерация координат
  45. Выражения-генераторы в Python
  46. Псевдонимы в Python
  47. Преобразование многоуровневого словаря

Marketello читают маркетологи из крутых компаний