Курс 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. Метод get для словаря
  4. Объединение словарей в Python
  5. Объединение списков в Python.
  6. Методы работы со списками
  7. Метод rsub в Python: расширение функциональности вычитания
  8. Работа с асинхронными задачами в Python
  9. Лямбда-функции в Python
  10. Работа с исключениями в Python
  11. Оператор continue в Python
  12. Поиск повторов в списке
  13. Добавление кнопки в tkinter
  14. Установка и использование TensorFlow
  15. Модуль inspect
  16. Удаление ключа из словаря в Python
  17. Управление сессиями в Python
  18. Оболочка Python
  19. Перемешивание списка с shuffle()
  20. Numpy: использование Ellipsis
  21. Установка Git и AWS CLI
  22. Оформление кода на Python
  23. Метод get() для словарей
  24. Ограничение ресурсов в Python
  25. Динамическая типизация в Python
  26. Ветвление выражения в Python
  27. Измерение времени выполнения кода с помощью time
  28. Закрытие файла в Python
  29. Установка и загрузка Instaloader
  30. Метод join() для объединения элементов строки
  31. Хранение переменных в Python.
  32. Множественное назначение в Python
  33. Оператор объединения словарей
  34. Замена элементов в списке с помощью генераторов списков
  35. Создание новых списков в Python
  36. Контроль точности вывода чисел
  37. Получение значений из словарей
  38. Копирование в Python
  39. Метод __float__ в Python
  40. Управление IP-адресами через прокси
  41. Преобразование PowerPoint в PDF.
  42. Область видимости переменных
  43. Применение функции map() в Python
  44. Делегирование в Python
  45. Сохранение и загрузка модели в PyTorch
  46. Создание новых списков
  47. Проверка запуска скрипта или импорта модуля

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