Курс 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. Функция format() в Python
  2. Бесконечные списки в Python
  3. Управление сессиями в Python
  4. Измерение времени выполнения кода
  5. Проблема сравнения словарей
  6. Функция zip() в Python
  7. Списки: объединение, изменение
  8. Группировка элементов Python
  9. Numpy: разбиение массивов
  10. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  11. Сравнение неупорядоченных списков
  12. Измерение времени выполнения кода
  13. Создание множества в Python
  14. Работа с YAML в Python
  15. Упрощение работы с JSON-данными в Python
  16. Codecademy в Telegram
  17. Поиск индексов в списке
  18. Форматирование строк в Python
  19. Открытие, чтение и закрытие файла
  20. Скрытие вывода данных
  21. Разделение строки на подстроки в Python
  22. Получение списка файлов в директории с использованием os
  23. Управление асинхронными задачами на Python.
  24. Python defaultdict добавление ключа
  25. Нахождение разницы между списками в Python
  26. Аргументы *args и **kwargs
  27. Методы list в Python
  28. Итераторы с потерямиZIP
  29. Транспонирование 2D-массива с помощью zip
  30. Работа с кортежами в Python
  31. Метод Enumerate() для списков
  32. Работа с defaultdictами в Python
  33. Инициализация переменных
  34. Конкатенация строк с помощью join()
  35. Построение графиков в Matplotlib
  36. Импорт модулей и пакетов в Python
  37. Генерация чисел с range()
  38. Решение переменной Шредингера
  39. Удаление falsy-значений из списка с помощью filter
  40. Обход элементов в Python
  41. Получение текущей директории
  42. Big O оптимизация
  43. Магические методы в Python
  44. Транспонирование матрицы
  45. Нахождение максимального значения и его индекса в списке
  46. Отправка HTTP-запросов с User-Agent
  47. Декораторы в Python
  48. Проектирование Singleton с метаклассом
  49. Python: отличительная особенность — отступы

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