Назад к вопросам
Middle
81
questionbank
Что такое перегрузка операторов в Python?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Перегрузка операторов — это возможность изменять поведение встроенных операторов Python для объектов пользовательских классов. Она осуществляется путем определения специальных магических (magic) или dunder (double underscore) методов.
Вот некоторые распространенные магические методы для перегрузки операторов:
| Оператор | Магический метод | Описание |
|---|---|---|
+ |
__add__(self, other) |
Сложение |
- |
__sub__(self, other) |
Вычитание |
* |
__mul__(self, other) |
Умножение |
/ |
__truediv__(self, other) |
Деление (чистое) |
// |
__floordiv__(self, other) |
Деление (целочисленное) |
% |
__mod__(self, other) |
Остаток от деления |
** |
__pow__(self, other) |
Возведение в степень |
== |
__eq__(self, other) |
Равенство |
!= |
__ne__(self, other) |
Неравенство |
< |
__lt__(self, other) |
Меньше |
> |
__gt__(self, other) |
Больше |
<= |
__le__(self, other) |
Меньше или равно |
>= |
__ge__(self, other) |
Больше или равно |
len() |
__len__(self) |
Длина |
str() |
__str__(self) |
Строковое представление (для пользователя) |
repr() |
__repr__(self) |
Строковое представление (для разработчика) |
Пример перегрузки оператора + для класса Vector:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
# Перегрузка оператора +
def __add__(self, other):
if isinstance(other, Vector):
return Vector(self.x + other.x, self.y + other.y)
else:
raise TypeError("Cannot add Vector and non-Vector type")
# Добавляем метод для удобного вывода
def __str__(self):
return f"({self.x}, {self.y})"
# Создание объектов Vector
v1 = Vector(1, 2)
v2 = Vector(3, 4)
# Использование перегруженного оператора +
v3 = v1 + v2
# Вывод результата
print(v3)
Перегрузка операторов делает код более читаемым и интуитивно понятным, позволяя использовать привычные операторы для работы с пользовательскими объектами. Однако злоупотреблять ею не стоит, чтобы не затруднять понимание кода.