Курс 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. Метод join() с набором
  2. Копирование в Python
  3. Работа с IP-адресами в Python
  4. Объединение словарей в Python
  5. Удаление символа из строки
  6. Сравнение строк в Python
  7. Тайное преобразование типа ключа
  8. Изменяемые и неизменяемые объекты
  9. Настройка нарезки списков
  10. Хеши в Python
  11. Печать календаря в Python
  12. Dict Comprehension в Python
  13. Курсы Яндекс Практикум
  14. Работа с датой и временем в Python
  15. Перевод двоичного кода в целое число
  16. Удаление ключей из словаря
  17. Мониторинг памяти с Pympler
  18. Работа с defaultdictами в Python
  19. Python enumerate() использование
  20. Удаление элементов из списка в Python
  21. Работа с комбинациями в Python.
  22. Метод pos в Python
  23. Операторы сравнения в Python
  24. Функция zip() в Python
  25. Метод ne для сравнения объектов
  26. Построение графиков в Matplotlib
  27. Метод classmethod
  28. Python Аргументы по умолчанию
  29. Тестирование модели в PyTorch
  30. Открытие и редактирование скриптов Python
  31. Строки в Python: апострофы и кавычки
  32. Переменная Шредингера
  33. Рекурсия для обращения строки
  34. Отладчик pdb: начало работы
  35. Beautiful Soup — извлечение данных из HTML
  36. Установка и использование howdoi
  37. Оценка точности модели
  38. Генерация чисел с range()
  39. Работа с OpenCV
  40. Сортировка HTML по CSS-селектору
  41. Функция findall() для поиска вхождений строки
  42. Глобальные переменные в Python
  43. Установка и использование Virtualenv

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