Курс 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. Декодирование байтов в строку
  3. Работа с множествами в Python
  4. Преобразование текста в речь с Python
  5. Поиск наиболее частого элемента
  6. Простой калькулятор Python
  7. Определение объема памяти объекта
  8. Работа с множествами в Python
  9. Библиотека Rich: форматирование текста
  10. Поиск HTML-элементов с BeautifulSoup
  11. Работа со словарями Python
  12. %pinfo: получение информации об объекте
  13. Атрибуты массивов в Numpy
  14. Декораторы для регистрации функций
  15. Атрибуты класса и экземпляра
  16. Конкатенация строк в Python
  17. Обработка исключений в Python
  18. Нахождение разницы между списками в Python
  19. Упрощенный вывод данных в Python
  20. Функции all и any в Python
  21. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  22. Работа с f-строками 2.0
  23. Список импортированных модулей в Python
  24. Форматирование чисел в Python
  25. Проверка файла .py на синтаксис.
  26. Метод radd для пользовательских чисел
  27. Сериализация данных в JSON с помощью json.dumps
  28. Декораторы в Python
  29. Обновление ключей в Python
  30. Сравнение строк в Python
  31. Управление сессиями в Python
  32. Создание уникального множества
  33. Класс-оболочка для словарей
  34. Метод __getitem__ в Python
  35. Преобразование чисел в слова
  36. Подсказки при вводе данных в Python
  37. Экспорт функций в Python
  38. Нан-рефлексивность в Python
  39. Структурирование именованных констант
  40. Сортировка HTML по CSS-селектору
  41. Оператор match в Python
  42. Константы в модуле cmath
  43. Удаление элемента по индексу в Python
  44. Блок else в Python

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