Курс Python → Переопределение метода sub

Метод sub(self, other) в Python позволяет определить поведение объекта при использовании оператора вычитания -. Когда мы переопределяем этот метод в нашем пользовательском классе, мы можем указать, как объект должен вести себя при вычитании от другого объекта. Например, если мы работаем с векторами, мы можем определить операцию вычитания так, чтобы вычитались соответствующие координаты векторов.

В случае, если операнд other также является объектом типа Vector, мы можем вычитать соответствующие координаты векторов и вернуть новый объект Vector, представляющий разность. Если other не является вектором, мы можем вызвать исключение TypeError, указав, что данная операция не поддерживается.

Этот лайфхак становится особенно полезным при работе с пользовательскими типами данных, такими как векторы, матрицы и другие структуры данных, где определение операции вычитания имеет смысл. Переопределение метода sub позволяет объекту поддерживать стандартную математическую операцию вычитания в Python, что делает код более понятным и гибким.


class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def sub(self, other):
        if isinstance(other, Vector):
            return Vector(self.x - other.x, self.y - other.y)
        else:
            raise TypeError("Unsupported operation")

Приведенный выше пример показывает, как можно переопределить метод sub в классе Vector для выполнения операции вычитания векторов. При вызове этого метода объектом Vector, мы можем вычислить разность координат и вернуть новый объект, представляющий результат вычитания. Это позволяет нам более гибко работать с векторами и другими пользовательскими структурами данных в Python.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. TON Smart Challenge #2: участие и подготовка
  2. Работа с эмодзи в Python
  3. Поиск наиболее частого элемента в списке
  4. Работа со строками в Python
  5. Документирование функций в Python
  6. Циклы в Python
  7. Оптимизация параметров в Python
  8. Оболочка Python
  9. Прокачанный трейсинг ошибок
  10. Округление дробей в Python
  11. Метод __iand__ для пользовательских классов
  12. Метод rmatmul для обратного матричного умножения
  13. Метаклассы в Python
  14. Конкатенация строковых литералов
  15. Преобразование многоуровневого словаря
  16. Комментарии в Python
  17. Получение текущей директории
  18. Разделение строки на подстроки в Python
  19. Работа с путями в Python
  20. Измерение времени выполнения с помощью time
  21. Срезы в Python
  22. Перетасовка списков в Python
  23. Избегайте пустого списка
  24. Поиск кода
  25. Переворот списка в Python
  26. Удаление элемента по индексу в Python
  27. Поиск всех индексов подстроки
  28. Сортировка списка по индексам
  29. Копирование объектов в Python
  30. Howdoi — получение ответов из терминала
  31. Импорт с альтернативным именем
  32. Проверка версии Python
  33. Работа с множествами в Python
  34. Создание новых списков
  35. Работа с deque из collections
  36. Измерение времени выполнения
  37. Вложенные генераторы в Python
  38. Путь к интерпретатору Python
  39. Использование функции enumerate()
  40. Работа с контекстными менеджерами
  41. Функция reduce() из модуля functools
  42. Объединение словарей в Python
  43. Аннотации типов в Python
  44. Оптимизация памяти с __slots__
  45. Модуль Operator в Python
  46. Вложенные циклы в Python
  47. Перегрузка операторов в Python

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