Курс 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. Основные операции с библиотекой Numpy
  2. Абстракции словарей и множеств в Python
  3. Получение текущей даты в Python
  4. *args и **kwargs в Python
  5. Работа с enumerate()
  6. Отправка POST запроса на сервер.
  7. Python Translator: создание локальных переводчиков
  8. Установка максимального количества цифр
  9. Работа с collections.Counter
  10. Конкатенация строковых литералов
  11. Работа с JSON данными в Python
  12. Использование функции product
  13. Инвертирование словаря
  14. Чтение бинарного файла в Python.
  15. Поиск шаблона в начале строки
  16. Метод join для наборов
  17. Просмотр файла в Jupyter Noteboo
  18. Профилирование данных с Pandas
  19. Форматирование объектов с модулем pprint
  20. Замена текста в Python
  21. Множественное наследование в Python
  22. Метод eq для сравнения объектов
  23. Логические операторы в Python
  24. Гибкие функции Python
  25. Склеивание строк через метод join()
  26. Фильтры Pillow: NEAREST, BILINEAR, BICUBIC
  27. Преобразование строк в числа в Python
  28. Модуль math: основные функции
  29. Возврат нескольких значений из функции
  30. Оператор объединения словарей
  31. Python Метод Union Множеств
  32. Запуск Python из интерпретатора
  33. Порядок и длина множеств в Python
  34. Модуль itertools: эффективная работа с итераторами
  35. Получение списка кортежей из словаря
  36. Наиболее частотные элементы с помощью Counter
  37. Проверка версии Python
  38. Возврат нескольких значений
  39. Обработка исключения UnboundLocalError
  40. Функция zip() — объединение последовательностей
  41. Сравнение строк в Python
  42. Метод join() для объединения элементов строки
  43. Импорт модуля из другого каталога
  44. Расчет времени выполнения программы

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