Python Language
Скрытые функции
Поиск…
Перегрузка оператора
Все в Python - это объект. Каждый объект имеет некоторые специальные внутренние методы, которые он использует для взаимодействия с другими объектами. Как правило, эти методы следуют __action__
об именах __action__
. В совокупности это называется моделью данных Python .
Вы можете перегрузить любой из этих методов. Это обычно используется при перегрузке оператора в Python. Ниже приведен пример перегрузки оператора с использованием модели данных Python. Класс Vector
создает простой вектор двух переменных. Мы добавим соответствующую поддержку математических операций двух векторов с использованием перегрузки операторов.
class Vector(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, v):
# Addition with another vector.
return Vector(self.x + v.x, self.y + v.y)
def __sub__(self, v):
# Subtraction with another vector.
return Vector(self.x - v.x, self.y - v.y)
def __mul__(self, s):
# Multiplication with a scalar.
return Vector(self.x * s, self.y * s)
def __div__(self, s):
# Division with a scalar.
float_s = float(s)
return Vector(self.x / float_s, self.y / float_s)
def __floordiv__(self, s):
# Division with a scalar (value floored).
return Vector(self.x // s, self.y // s)
def __repr__(self):
# Print friendly representation of Vector class. Else, it would
# show up like, <__main__.Vector instance at 0x01DDDDC8>.
return '<Vector (%f, %f)>' % (self.x, self.y, )
a = Vector(3, 5)
b = Vector(2, 7)
print a + b # Output: <Vector (5.000000, 12.000000)>
print b - a # Output: <Vector (-1.000000, 2.000000)>
print b * 1.3 # Output: <Vector (2.600000, 9.100000)>
print a // 17 # Output: <Vector (0.000000, 0.000000)>
print a / 17 # Output: <Vector (0.176471, 0.294118)>
Приведенный выше пример демонстрирует перегрузку основных числовых операторов. Полный список можно найти здесь .
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow