Python overloading operator - Add, subtract, multiply objects using arithmetic operators

Python string can be added using plus symbol as if strings were numbers. You can define addition to class object using __add__ function.

class Vector:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    def __add__(self, other):
        x = self.x + other.x
        y = self.y + other.y
        z = self.z + other.z
        return Vector(x, y, z)


u = Vector(1, 2, 3)
v = Vector(4, 5, 6)

w1 = u + v
w2 = u.__add__(v)

print(w1.x, w1.y, w1.z)  # 5 7 9
print(w2.x, w2.y, w2.z)  # 5 7 9

Vector class is the original class and the object has 3 properties, x, y, z. This class defines __add__ method so the vector object can be added like Python number or string.

w1 and w2 are the same. The form u+v is exactly addition!

Subtraction

__sub__ is a subtraction method that enables the object subtraction as follows.

class Vector:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    def __add__(self, other):
        x = self.x + other.x
        y = self.y + other.y
        z = self.z + other.z
        return Vector(x, y, z)

    def __sub__(self, other):
        x = self.x - other.x
        y = self.y - other.y
        z = self.z - other.z
        return Vector(x, y, z)


u = Vector(1, 2, 3)
v = Vector(4, 7, 10)

w = v - u

print(w.x)  # 3
print(w.y)  # 5
print(w.z)  # 7

Multiplication

__mul__ is a multiplication method. The following example shows how to define the function calculating the inner product of vectors with multiplication overriding.

class Vector:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    def __add__(self, other):
        x = self.x + other.x
        y = self.y + other.y
        z = self.z + other.z
        return Vector(x, y, z)

    def __sub__(self, other):
        x = self.x - other.x
        y = self.y - other.y
        z = self.z - other.z
        return Vector(x, y, z)

    def __mul__(self, other):
        return self.x * other.x + self.y * other.y + self.z * other.z


u = Vector(1, 2, 3)
v = Vector(1, 1, 1)

w = v * u

print(w)  # 6

Python Class

Python Tutorial