Курс 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. Удаление файлов с shutil.os.remove()
  2. Просмотр внешнего файла в Python
  3. Очистка данных с Pandas
  4. Работа с PosixPath() в Python
  5. Закрытие файла в Python
  6. Генерация тестовых данных с factory_boy
  7. Операции с массивами в NumPy
  8. Тип данных TypeVarTuple
  9. *args и **kwargs в Python
  10. Работа с CSV файлами
  11. Метод rmatmul для обратного матричного умножения
  12. Обход элементов в Python
  13. Многострочные комментарии в Python
  14. Работа с defaultdictами в Python
  15. Установка библиотек в Python
  16. Работа с timedelta
  17. Форматирование чисел в Python
  18. Форматирование вывода списков
  19. Преобразование многоуровневого словаря
  20. Декораторы для регистрации функций
  21. Преобразование чисел в восьмеричную строку
  22. Модуль pprint: улучшение вывода данных
  23. Передача словаря через **kwargs
  24. Защита данных в Python
  25. Форматирование строк в Python
  26. Оптимизация параметров в Python
  27. Округление банкира в Python
  28. Генерация случайных чисел в Python
  29. Измерение времени выполнения кода
  30. Многострочные комментарии в Python
  31. Сортировка списка по индексам
  32. Оптимизация сравнения в Python
  33. Подсчет элементов в Python
  34. Выборка чисел
  35. Метод ipow для возведения в степень
  36. Функции в Python
  37. Объединение списков с помощью zip
  38. Встраивание HTML в Jupyter Notebook
  39. Создание новых функций с помощью functools.partial
  40. Добавление элементов в список
  41. Просмотр файла в Jupyter Noteboo
  42. Очистка списка от False, None, 0, «»
  43. Метод split() в Python
  44. Генераторы в Python
  45. Работа с deque из collections
  46. Переопределение оператора % для объектов

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