curriculum/challenges/english/blocks/learn-special-methods-by-building-a-vector-space/65f9b486989cb90ff3e77ac8.md
The other parameter of your __add__ method represents the operand placed at the right side of the + operator in an addition operation.
You want to verify that the right-hand operand is not an object of the same class as the left-hand operand (i.e. self). Create an if statement that verifies that by checking the type of the operands.
You should create an if statement that checks if type(self) and type(other) are different.
({ test: () => assert(runPython(`
node = _Node(_code).find_class("R2Vector").find_function("__add__").find_ifs()[0].find_conditions()[0]
node.is_equivalent("type(self) != type(other)") or node.is_equivalent("type(other) != type(self)")
`)) })
class R2Vector:
def __init__(self, *, x, y):
self.x = x
self.y = y
def norm(self):
return sum(val**2 for val in vars(self).values())**0.5
def __str__(self):
return str(tuple(getattr(self, i) for i in vars(self)))
def __repr__(self):
arg_list = [f'{key}={val}' for key, val in vars(self).items()]
args = ', '.join(arg_list)
return f'{self.__class__.__name__}({args})'
--fcc-editable-region--
def __add__(self, other):
pass
--fcc-editable-region--
class R3Vector(R2Vector):
def __init__(self, *, x, y, z):
super().__init__(x=x, y=y)
self.z = z
v1 = R2Vector(x=2, y=3)
v2 = R3Vector(x=2, y=2, z=3)
print(f'v1 = {v1}')
print(f'v2 = {v2}')