Курс 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. Работа с модулем Calendar
  2. Отладка утечек памяти в Python
  3. Удаление и повторная вставка ключа в OrderedDict
  4. Печать списка с помощью метода join
  5. Принципы программирования
  6. Основные методы NumPy
  7. Расширение информации об ошибке в Python
  8. Выход из профиля в Django
  9. Получение имени функции с помощью inspect
  10. Присвоение значений переменным в Python
  11. HTTP-запросы с библиотекой Requests
  12. Утечки переменных цикла в Python 3.x
  13. Декораторы в Python
  14. Работа с комплексными числами
  15. Преобразование объекта в строку
  16. Поиск самого частого элемента
  17. Оператор «is not» в Python
  18. Любовь к Python
  19. Метод count() для списка
  20. Деление в Python
  21. Управление доступом к модулю
  22. Python: библиотеки и функции
  23. Сокращение ссылок с pyshorteners
  24. Создание новых списков через list comprehensions
  25. split() — разделение строки
  26. Вычисление натурального логарифма в NumPy
  27. Работа с библиотекой requests
  28. Удаление первого элемента списка
  29. Numpy: объединение массивов
  30. Рациональные числа в Python
  31. Ограничение ресурсов в Python
  32. Установка Git и AWS CLI
  33. Функция map() в Python
  34. Оператор in и not in в Python
  35. Виртуальные среды в Python
  36. Ускорение обработки данных с %autoawait
  37. Основные операции с библиотекой Numpy
  38. Операции с матрицами в Python
  39. Описание скриптов в README
  40. Python Calendar Usage
  41. Big O оптимизация
  42. Метод setdefault() в Python

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