Курс 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. Создание задания в Cron
  2. Оператор in и not in в Python
  3. Функции в Python: создание и вызов
  4. HTTP-запросы с библиотекой Requests
  5. Конвертация коллекций в Python.
  6. Python и Монти Пайтон
  7. Замена символов в строке
  8. Обновление множества в Python
  9. Работа с множествами в Python
  10. Переворот списка в Python
  11. Создание уникального множества
  12. Оптимизация параметров в Python
  13. Применение функции map() в Python
  14. Вакансии в Nebius
  15. Работа с итераторами в Python
  16. Обучение модели с указанием эпох
  17. Логирование с Loguru
  18. Defaultdict в Python
  19. Создание уникального проекта
  20. Получение текущей даты в Python
  21. Распаковка элементов массива
  22. Создание новых списков в Python
  23. Профилирование с cProfile
  24. Различия символов в Python
  25. Функция zip() — объединение последовательностей
  26. Печать календаря в Python
  27. Операторы += в Python
  28. Измерение времени выполнения кода
  29. Лямбда-функции в Python
  30. Создание объекта timedelta
  31. Подсчет частотности элементов в Python
  32. Возврат нескольких значений из функции
  33. Сравнение строк в Python
  34. Управление пакетами с pip
  35. Преобразование числа в восьмеричную строку
  36. Функции all() и any() в Python
  37. Делегирование в Python
  38. Обработка исключений
  39. Иерархия классов в Python
  40. Форматирование строк в Python
  41. Итерация по итерируемым объектам
  42. Метод pos в Python
  43. Избегание изменяемых аргументов
  44. Преобразование вложенного списка
  45. Область видимости переменных
  46. Отладка в Python

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