Курс 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. Функция reversed() в Python
  2. Метод split() в Python
  3. Безопасные SQL-запросы в Python 3.11
  4. Генерация QR-кодов с библиотекой qrcode
  5. Аннотации типов в Python
  6. Создание пар из последовательностей
  7. Функция print() — вывод информации
  8. Обработка элементов в Python
  9. Декоратор Property в Python
  10. Измерение времени выполнения
  11. Функциональное программирование.
  12. Фильтрация списка чисел
  13. Псевдонимы в Python
  14. Поиск подстроки в строке
  15. Функция map() в Python
  16. Удаление дубликатов с помощью множеств
  17. Создание словарей в Python
  18. Применение функции к элементам списка
  19. Вывод символов строки в Python
  20. Просмотр внешнего файла в Python
  21. Многострочные комментарии в Python
  22. Работа с утверждениями в Python
  23. Python Translator: создание локальных переводчиков
  24. Создание уникального множества
  25. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  26. Округление чисел с помощью round
  27. Регистрация на TenChat
  28. Метод __getitem__ в Python
  29. Тестирование с unittest
  30. Использование функции product
  31. Асинхронное выполнение задач в процессах
  32. Перехват исключений в Python
  33. Подсчет элементов с помощью Counter
  34. Создание спинбокса в tkinter
  35. Установка Python3.7 и PIP
  36. Создание обратного итератора
  37. Замена подстроки
  38. 9 уловок для чистого кода
  39. Печать комбинаций в Python с Itertools
  40. Оптимизация гиперпараметров в Python
  41. List Comprehension Tutorial
  42. Работа с изображениями PIL
  43. Подсчет количества элементов в списке
  44. Деление в Python
  45. Генераторы в Python
  46. Пропуск начальных строк с помощью dropwhile()
  47. Красивый вывод списка

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