Курс 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. Разделение строки с помощью split()
  2. Функция eval() в Python
  3. Python и Юникод: работа с цифрами
  4. Асинхронный код в Python
  5. Вывод с переменной через запятую
  6. Оптимизация строк в Python
  7. Создание спинбокса в tkinter
  8. Распаковка элементов последовательности
  9. Создание списка дат
  10. Доступ к локальным переменным
  11. Поиск уникальных и повторяющихся элементов
  12. Структура данных словарь в Python
  13. Метод __iand__ для пользовательских классов
  14. Комментарии в Python.
  15. Поиск самого длинного слова в списке с использованием max()
  16. Defaultdict в Python
  17. Оператор in для проверки наличия элемента
  18. Работа с контекст-менеджером «with»
  19. Удаление ключей из словаря
  20. Изменение IP-адреса в Python
  21. Класс-оболочка для словарей
  22. Форматирование строк в Python
  23. Введение в Python
  24. Списковое включение в Python
  25. Методы shutil для работы с файлами
  26. Оператор in для Python
  27. Ускорение выполнения кода в Python
  28. Функция zip() в Python
  29. Получение локальных переменных в Python
  30. Множества и frozenset
  31. Поиск email
  32. Методы работы со списками
  33. EMOT преобразование эмодзи в текст
  34. Выход из профиля в Django
  35. Функция __init__ в Python
  36. Управление ресурсами в Python
  37. Управление памятью в Python
  38. Преобразование текста в нижний регистр
  39. Работа с переменными в Python
  40. Генераторы в Python
  41. Определение локальных переменных в Python
  42. Обмен значений переменных в Python
  43. Python Тесты и Гайды
  44. Избегайте ошибку FileNotFoundError
  45. Работа с итераторами в Python
  46. Оператор морж в Python 3.8
  47. Методы split() и join() — Python строк.

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