Простыми словами о сложном: Перегрузка операторов в 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. По опыту админа, перегрузка запоминается легче, если акцентировать внимание на операторах, запомнить хорошенько, что под ними имеется в виду. Вот
полный список операторов, чтобы вы их отличали от других объектов языка.