Курс 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. Получение списка файлов в директории с использованием os
  3. Возврат нескольких значений
  4. Сравнение def и lambda-функций
  5. Передача словаря через **kwargs
  6. Множественное назначение в Python
  7. Получение текущего времени в Python
  8. Генераторы в Python
  9. Удаление символов новой строки в Python.
  10. Экспорт внешнего файла с помощью writefile
  11. Библиотека wikipedia для Python
  12. Генерация случайных чисел Python
  13. Удаление символа из строки
  14. Замыкания в Python
  15. Избегайте использования goto
  16. Подсчет элементов с помощью Counter из collections
  17. Установка и использование модуля «howdoi»
  18. Использование подчеркивания в REPL
  19. Пересечение списков с использованием множеств
  20. Python defaultdict добавление ключа
  21. Преобразование строк в числа в Python
  22. Импорт модулей в Python 3.12
  23. Метод join() для объединения элементов
  24. Протокол управления контекстом
  25. Функция map() и ленивая оценка
  26. Реализация операции -= для пользовательского класса
  27. Нахождение самого длинного слова в списке с помощью max
  28. Модуль functools в Python
  29. Поиск шаблона в начале строки
  30. Оформление кода по PEP 8
  31. Генераторные функции в Python
  32. Итераторы в Python
  33. Абстракции словарей и множеств в Python
  34. Установка и использование библиотеки google
  35. Операторы присваивания в Python
  36. Метод enumerate() в Python
  37. Оператор += для объединения строк
  38. Добавление Progressbar в Python
  39. Переворот строки
  40. Enum в Python: создание и использование перечислений
  41. Функция enumerate() в Python
  42. Получение текущей директории
  43. Создание словарей и множеств в Python
  44. Модуль Operator в Python
  45. Переопределение метода xor в Python

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