Курс 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. Оператор continue в Python
  2. Декораторы в Python
  3. Искажение имен в Python
  4. ROT13 Шифр Цезаря в Python
  5. Сравнение строк в Python
  6. Управление асинхронными задачами на Python.
  7. Создание новых списков через list comprehensions
  8. Методы обработки строк в Python
  9. IPython и Jupyter Notebook: руководство
  10. Лямбда-функции в Python
  11. Проверка подстроки в строке
  12. Декоратор Ajax required
  13. Копирование объектов в Python
  14. Лямбда-функции в defaultdict
  15. Функция count() в Python
  16. Работа с процессами в Python
  17. Установка и использование Logzero
  18. Функции any() и all() в Python
  19. Извлечение данных из JSON
  20. Оператор space-invader
  21. Оптимизация поиска в словарях
  22. Проверка вхождения подстроки
  23. Каналы Senior: Python, Java, Frontend, SQL, C++
  24. Получение локальных переменных в Python
  25. Работа с IP-адресами в Python
  26. Автоматизация действий с Pyautogui
  27. Обработка исключений
  28. Применение функций в Python
  29. Группы исключений в Python
  30. Преобразование типов данных в set comprehension
  31. Управление импортом в Python
  32. Метод repr() в Python
  33. Проверка строки на палиндром
  34. Изменение элемента списка
  35. Метод rsub в Python: расширение функциональности вычитания
  36. Логические значения в Python
  37. Многострочные строки в Python
  38. Установка random seed в Python
  39. Функция sleep() в Python
  40. Конвертация коллекций в Python.
  41. Определение основы слова с showballstemmer
  42. Python Метод sleep() времени
  43. Извлечение аудио из видео
  44. Официальный канал Python в Telegram
  45. Оформление текста в консоли с TermColor
  46. Получение обратного списка чисел

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