# 12.6. Operator Arithmetic About¶

• Operator Overload is the Pythonic way

• Operator Overload allows simpler operations

• All examples in this chapter uses dataclasses for you to focus on the important code, not boilerplate code just to make it works

## 12.6.1. Recap¶

>>> a = int(1)
>>> b = int(2)
>>> a + b
3

>>> a = float(1.0)
>>> b = float(2.0)
>>> a + b
3.0

>>> a = str('1')
>>> b = str('2')
>>> a + b
'12'

>>> a = list([1])
>>> b = list([2])
>>> a + b
[1, 2]


## 12.6.2. Problem¶

>>> class Vector:
...     def __init__(self, x, y):
...         self.x = x
...         self.y = y
>>>
>>>
>>> a = Vector(1,2)
>>> b = Vector(2,3)
>>> a + b
Traceback (most recent call last):
TypeError: unsupported operand type(s) for +: 'Vector' and 'Vector'


## 12.6.3. Solution¶

>>> class Vector:
...     def __init__(self, x, y):
...         self.x = x
...         self.y = y
>>>
>>>
>>> Vector(x=1, y=2) + Vector(x=3, y=4)
Traceback (most recent call last):
TypeError: unsupported operand type(s) for +: 'Vector' and 'Vector'


## 12.6.4. Dataclasses¶

>>> from dataclasses import dataclass

>>> @dataclass
... class Vector:
...     x: int
...     b: int
>>>
>>>
>>> a = Vector(1,2)
>>> b = Vector(2,3)
>>> a + b
Traceback (most recent call last):
TypeError: unsupported operand type(s) for +: 'Vector' and 'Vector'

>>> @dataclass
... class Vector:
...     x: int = 0
...     y: int = 0
...
...     def __add__(self, other):
...         new_x = self.x + other.x
...         new_y = self.y + other.y
...         return Vector(new_x, new_y)
>>>
>>>
>>> Vector(x=1, y=2) + Vector(x=3, y=4)
Vector(x=4, y=6)
>>>
>>> Vector(x=1, y=2) + Vector(x=3, y=4) + Vector(x=5, y=6)
Vector(x=9, y=12)