TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #3721 2.5K
Простыми словами о сложном: Перегрузка операторов в Python

В действительности термин означает всего лишь перехватывание встроенных операций с помощью классов. Вот краткий обзор ключевых идей в основе механизма перегрузки:
- Перегрузка позволяет классам участвовать в обычных операциях.
- Классы могут перегружать все операторы выражений.
- Классы могут также перегружать такие операции, как вывод, вызов функций, обращение к атрибутам и так далее.
- Перегрузка делает экземпляры классов более похожими на встроенные типы.
- Перегрузка заключается в реализации в классах методов со специальными именами.

Давайте рассмотрим пример.

class Vector2D:
def __init__(self, x, y):
self.x = x
self.y = y

def __add__(self, other):
return Vector2D(self.x + other.x, self.y + other.y)

def __repr__(self):
return f"Vector2D({self.x}, {self.y})"

# Пример использования
x = Vector2D(3, 4)
y = Vector2D(5, 6)

result = x + y
print(result) # Вывод: Vector2D(8, 10)


Класс Vector2D определяет 2D-вектор с координатами x и y. Метод __add__ перегружает оператор +, чтобы складывать координаты двух векторов. Метод __repr__ определяет, как объект будет представлен, чтобы было удобно его видеть при выводе. В итоге, мы теперь умеем складывать вектора, как на уроках школьной алгебры, простым знаком плюса.

Вот 10 самых частоиспользуемых "магических" методов, которые перегружают:

1. __init__: Вызывается при создании нового объекта, используется для инициализации атрибутов объекта.
2. __str__: Определяет строковое представление объекта, используется функцией str() и при выводе через print().
3. __repr__: Определяет, как будет выводится итоговый объект.
4. __add__: Перегружает оператор +, используется для определения поведения сложения объектов.
5. __sub__: Перегружает оператор -, используется для определения поведения вычитания объектов.
6. __mul__: Перегружает оператор *, используется для определения поведения умножения объектов.
7. __truediv__: Перегружает оператор /, используется для определения поведения деления объектов.
8. __getitem__: Перегружает оператор [], используется для доступа к элементам объекта, как в списках или словарях.
9. __setitem__: Перегружает оператор [], используется для задания значений элементам объекта.
10. __len__: Возвращает длину объекта, используется функцией len().

p.s. По опыту админа, перегрузка запоминается легче, если акцентировать внимание на операторах, запомнить хорошенько, что под ними имеется в виду. Вот полный список операторов, чтобы вы их отличали от других объектов языка.
Telegram Python: задачки и вопросы Марк Лутц, «Изучаем Python»: полный список операторов
  • 👍 5
  • ❤ 1
  • ☃ 1
More from @zen_of_python
  1. Oct 1, 2026Как не сломать pickle собственным исключением Python Если конструктор исключения принимает…
  2. Oct 1, 2026Как выстроить защиту цепочки поставок Python Эшелонированная схема защиты начинается с соб…
  3. Sep 30, 2026Пакетная обработка в Python: где strict=True не спасает запись С Python 3.12 itertools.bat…
  4. Sep 30, 2026Как воспроизводить гонки потоков Python с помощью blanket Обычно порядок выполнения потоко…
  5. Sep 30, 2026Как отменять задачи в heapq и сохранять порядок при равных приоритетах heapq сравнивает ко…
  6. Sep 29, 2026Как битовые множества сокращают память моделей Pydantic Explicit is better than implicit,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →