Курс 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. Распаковка аргументов в Python
  3. ChainMap избыточные ключи
  4. Просмотр атрибутов и методов класса
  5. Оператор is в Python
  6. Работа со словарями в Python
  7. Метод bool() в Python
  8. Работа с IP-адресами в Python
  9. Переопределение метода len
  10. Библиотека itertools: объединение списков
  11. Объединение словарей в Python
  12. Методы classmethod и staticmethod
  13. Поиск повторов в списке
  14. Создание списков в Python
  15. Метод Enumerate() для списков
  16. Подсказки при вводе данных в Python
  17. Явный импорт переменных
  18. Руководство по использованию Colorama
  19. Работа с JSON в Python
  20. Метод title() в Python
  21. Запрос DELETE с библиотекой requests
  22. Изменения в обработке логических значений
  23. Метод rsub для пользовательских чисел
  24. Генераторные функции в Python
  25. Получение частей дроби
  26. Чтение бинарного файла в Python.
  27. Фильтрация элементов с помощью islice
  28. Форматирование данных с помощью pprint
  29. Декоратор для группы пользователей в Django
  30. Математические функции в Python
  31. Именованные кортежи в Python
  32. Создание коллекций из выражения-генератора
  33. Оператор assert в Python
  34. Создание и использование модулей в Python
  35. Проверка элементов списка условием
  36. Функции в одну строку
  37. Форматирование строк с помощью f-строк
  38. Объединение списков с помощью zip
  39. Присвоение и ссылки
  40. Создание GUI на Tkinter
  41. Автоматизация с Python
  42. Метод ipow для возведения в степень
  43. Управление контекстом выполнения кода
  44. Инверсия списка и строки в Python
  45. Лямбда-функции в defaultdict
  46. Переопределение метода
  47. Применение функции к списку
  48. Ускоренный импорт библиотек

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