Middle
97
questionbank
Какие методы __add__, __mul__, __sub__ и __truediv__ вы знаете и как их можно использовать в Python?
Ответ от нейросети
sobes.tech AI
Это специальные "магические" или "дандем" методы, используемые для перегрузки операторов. Они позволяют объектам класса вести себя как стандартные числовые типы при выполнении арифметических операций.
__add__(self, other): Перегрузка оператора+. Вызывается при сложении объектов (self + other).__mul__(self, other): Перегрузка оператора*. Вызывается при умножении объектов (self * other).__sub__(self, other): Перегрузка оператора-. Вызывается при вычитании объектов (self - other).__truediv__(self, other): Перегрузка оператора/. Вызывается при "истинном" делении объектов (self / other), возвращающем результат типаfloat.
Пример использования в классе 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)
# Сложение вектора с числом (умножение на скаляр)
elif isinstance(other, (int, float)):
return Vector(self.x + other, self.y + other)
else:
return NotImplemented # Указывает, что операция не поддерживается для данного типа
def __mul__(self, other):
# Умножение вектора на скаляр
if isinstance(other, (int, float)):
return Vector(self.x * other, self.y * other)
# Скалярное произведение двух векторов
elif isinstance(other, Vector):
return self.x * other.x + self.y * other.y
else:
return NotImplemented
def __sub__(self, other):
# Вычитание вектора
if isinstance(other, Vector):
return Vector(self.x - other.x, self.y - other.y)
# Вычитание числа
elif isinstance(other, (int, float)):
return Vector(self.x - other, self.y - other)
else:
return NotImplemented
def __truediv__(self, other):
# Деление вектора на скаляр
if isinstance(other, (int, float)) and other != 0:
return Vector(self.x / other, self.y / other)
else:
return NotImplemented # Деление на ноль или нечисловой тип не поддерживается
def __str__(self):
return f"Vector({self.x}, {self.y})"
# Примеры использования:
v1 = Vector(1, 2)
v2 = Vector(3, 4)
sum_vector = v1 + v2 # Вызывает v1.__add__(v2)
print(f"v1 + v2 = {sum_vector}")
scaled_vector = v1 * 5 # Вызывает v1.__mul__(5)
print(f"v1 * 5 = {scaled_vector}")
diff_vector = v2 - v1 # Вызывает v2.__sub__(v1)
print(f"v2 - v1 = {diff_vector}")
divided_vector = v1 / 2.0 # Вызывает v1.__truediv__(2.0)
print(f"v1 / 2.0 = {divided_vector}")
dot_product = v1 * v2 # Вызывает v1.__mul__(v2)
print(f"v1 * v2 (скалярное произведение) = {dot_product}")