Курс 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. Переименование файлов в Python
  2. Метод rsub для пользовательских чисел
  3. Вычисление натурального логарифма в NumPy
  4. Подсчет количества элементов в списке
  5. Оператор объединения словарей
  6. Выход из профиля в Django
  7. Преобразование Excel в PDF с Spire.XLS
  8. Итерация по итерируемым объектам
  9. Мониторинг работы программы Py-spy
  10. Многострочные комментарии в Python
  11. Работа с буфером обмена на Python
  12. Автоматизация действий с Pyautogui
  13. Определение наиболее частого элемента с помощью collections.Counter
  14. Функции all() и any() в Python
  15. inspect в Python: анализ кода
  16. Colorama: окрашивание текста в Python
  17. Сравнение объектов в Python
  18. Работа с пользовательским вводом
  19. Срезы в Python
  20. Форматирование данных с помощью pprint
  21. Big O оптимизация
  22. Замена текста с помощью sub
  23. Создание словаря в Python
  24. Выражения-генераторы в Python
  25. Упрощение работы с JSON-данными в Python
  26. Подсчет элементов в Python
  27. Defaultdict в Python
  28. Переопределение метода delitem в Python
  29. Конструктор в Python
  30. Удаление символа из строки
  31. Создание веб-приложения с Flask
  32. Работа с модулем Calendar
  33. Оператор += в Python
  34. Преобразование чисел в слова
  35. Ветвление выражения в Python
  36. Создание списков в Python
  37. Обновление ключей в Python
  38. Получение текущей даты и времени с помощью datetime
  39. Оператор walrus в Python
  40. Concrete Paths в Python
  41. Удаление элемента из списка в Python
  42. Декораторы в Python
  43. Оптимизация памяти с __slots__
  44. Модуль os: работа с файлами и папками
  45. Получение значений из словарей

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