Курс 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. Удаление файлов с shutil.os.remove()
  2. Метод hash в Python
  3. Профилирование данных с Pandas
  4. Конкатенация строк с join() в Python
  5. Использование модуля math
  6. Удаление и повторная вставка ключа в OrderedDict
  7. Определение объема памяти объекта
  8. Названия столбцов в Python таблицах
  9. Переопределение метода __and__
  10. Установка и использование модуля Wikipedia
  11. Преобразование символов в нижний регистр
  12. Различия символов в Python
  13. Подсчет элементов в Python
  14. Методы __repr__ и __str__ в Python
  15. Декораторы с @wraps
  16. Функция product() в Python
  17. Работа с deque из collections
  18. Конвертация коллекций в Python.
  19. Печать комбинаций в Python с Itertools
  20. Изучение объектов с помощью dir()
  21. Подсказки при вводе данных в Python
  22. Преобразование строк в числа в Python
  23. Копирование файлов с shutil()
  24. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  25. Генерация чисел с range()
  26. Измерение времени выполнения кода
  27. Объединение словарей в Python 3.5+
  28. Нахождение пересечения множеств
  29. Форматирование данных с pprint
  30. Объединение списков в Python
  31. Использование html-скриптов в Jupyter Notebook
  32. Частичное совпадение пользовательского ввода в Python 3.10
  33. Объединение коллекций в Python
  34. Создание namedtuple списком полей
  35. Работа с типами данных в Python с помощью pydantic.
  36. Распаковка аргументов в Python
  37. Поиск элементов BeautifulSoup
  38. Генерация случайных чисел в Python
  39. Проверка на истинность объектов в Python
  40. Установка и загрузка Instaloader
  41. Зарезервированные слова в Python
  42. Создание словаря в Python
  43. Форматирование даты с strftime()
  44. Применение промокода в Много лосося
  45. split() без разделителя

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