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