Middle
162
Python'da __add__, __mul__, __sub__ ve __truediv__ yöntemlerini biliyor musunuz ve bunlar nasıl kullanılabilir?
AI'dan gelen yanıt
sobes.tech yapay zeka
Это специальные "магические" или "дандем" методы, используемые для перегрузки операторов. Они позволяют объектам класса вести себя как стандартные числовые типы при выполнении арифметических операций.
__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}")