Курс 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. Библиотека sh: использование команд bash в Python
  2. Удаление и повторная вставка ключа в OrderedDict
  3. Обход дочерних элементов BeautifulSoup
  4. Обработка ошибок в Python
  5. Логирование с Loguru
  6. Принципы LSP и ISP в Python
  7. Удаление элементов из списка в Python
  8. Декораторы в Python
  9. Сортировка HTML-элементов
  10. Условные выражения в Python
  11. Особенности множеств в Python
  12. Проверка условий в Python
  13. Сортировка элементов с OrderedDict
  14. Работа с атрибутом dict
  15. Получение ID процесса
  16. Равенство и идентичность в Python
  17. Группы исключений в Python
  18. Возврат нескольких значений из функции
  19. Создание множества в Python
  20. Обработка исключений с блоком else
  21. Работа со словарями
  22. Метод rrshift для пользовательских объектов
  23. Создание и использование ChainMap
  24. Получение идентификатора объекта в памяти
  25. Работа с CSV файлами в Python
  26. Обработка элементов в Python
  27. Контекстный менеджер в Python
  28. Создание виртуальной среды
  29. Проверка класса объекта
  30. Работа с IP-адресами в Python
  31. OrderedDict — упорядоченный словарь
  32. Декоратор защиты анонимных пользователей
  33. Классы данных в Python
  34. Проверка переменных окружения в Python
  35. Глобальные переменные в Python
  36. Генераторы в Python
  37. Поиск индекса элемента
  38. Управление доступом к модулю
  39. Преобразование многоуровневого словаря
  40. Проблема сравнения словарей
  41. Защита данных в Python
  42. Обработка исключений
  43. Тайное преобразование типа ключа

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