Курс 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. Извлечение аудио из видео
  2. Названия столбцов в Python таблицах
  3. Генератор чисел Фибоначчи
  4. Список импортированных модулей в Python
  5. Python UserString — создание подклассов строк
  6. Введение в Python
  7. Срезы в Python
  8. Базовые объекты Python
  9. Создание списка дат
  10. Экспорт внешнего файла с помощью writefile
  11. Встраивание HTML в Jupyter Notebook
  12. Оператор in в Python
  13. Метод classmethod
  14. Форматирование строк в Python
  15. Метод eq для сравнения объектов
  16. Объединение списков в Python
  17. Подсчет частотности элементов в Python
  18. Метод ne для сравнения объектов
  19. Переворот строки с использованием цикла
  20. Преобразование документов в PDF с помощью Spire.Office
  21. Удаление символа из строки
  22. Генераторы в Python
  23. Генерация резюме в Gensim
  24. Создание функций с произвольным количеством аргументов
  25. Открытие и запись файлов
  26. Проверка существования переменной с оператором :=
  27. Принципы программирования
  28. Генераторные функции в Python
  29. Создание класса в Python
  30. Функция reduce() в Python
  31. Работа с изменяемыми коллекциями
  32. Декоратор Ajax required
  33. Циклы for в Python
  34. Курсы Яндекс Практикум
  35. Удаление файлов с shutil.os.remove()
  36. Официальный канал Python в Telegram
  37. Слияние словарей в Python 3.9
  38. Оператор объединения словарей
  39. Создание панели меню Tkinter
  40. Создание копии списка в Python
  41. Работа с кортежами в Python
  42. Структуры данных в Python
  43. Определение объема памяти объекта
  44. Проверка окончания строки с помощью str.endswith()

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