Курс 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. Сортировка с параметром key
  2. Переопределение метода __lshift__
  3. Объединение списков с использованием itertools.chain
  4. Модуль pprint
  5. Python 3.12: переиспользование кавычек
  6. GitHub в Telegram: подписка на уведомления
  7. Комплексные числа в Python
  8. Ускоренный импорт библиотек
  9. Множества и frozenset
  10. Измерение времени выполнения кода
  11. Декораторы в Python
  12. Проверка типов с использованием isinstance
  13. Транспонирование 2D-массива с помощью zip
  14. Объединение коллекций в Python
  15. Python Поверхностное Копирование
  16. Переопределение метода __eq__
  17. Python union() функция — объединение множеств
  18. Функции в Python
  19. Удаление файлов с shutil.os.remove()
  20. Преобразование генераторов в циклы
  21. Пропуск начальных строк с помощью dropwhile()
  22. Логирование с Loguru
  23. Отправка POST-запроса в REST API
  24. Оформление кода на Python
  25. Слияние словарей в Python 3.9
  26. Форматирование строк с % в Python
  27. Удаление элемента по индексу в Python
  28. Повторение и перенос строки
  29. Обработка аргументов Python
  30. Запуск асинхронной корутины
  31. Работа с enumerate()
  32. Присоединение элементов коллекции
  33. Тайное преобразование типа ключа
  34. Обработка исключений с блоком else
  35. Измерение времени выполнения кода
  36. Создание файла с проверкой ошибки
  37. Принципы программирования
  38. Анонимные функции в Python
  39. Комментарии в Python
  40. Сокращение ссылок с pyshorteners
  41. Активация Matplotlib в Jupyter
  42. Копирование и вставка текста в Python
  43. Преобразование букв в нижний регистр
  44. Создание веб-приложения с Flask
  45. Метод __complex__ в Python
  46. Проверка версии Python

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