# Learn Special Methods by Building a Vector Space - Step 61

### Tell us what’s happening:

it says “The ne method should return False if each attribute of the current instance is equal to the same attribute of other and True otherwise.” even though thats what i’ve done. ive gotten attribute of self made it == to attr of other then returned false then said if its not return True

``````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})'

if type(self) != type(other):
return NotImplemented
kwargs = {i: getattr(self, i) + getattr(other, i) for i in vars(self)}
return self.__class__(**kwargs)

def __sub__(self, other):
if type(self) != type(other):
return NotImplemented
kwargs = {i: getattr(self, i) - getattr(other, i) for i in vars(self)}
return self.__class__(**kwargs)

def __mul__(self, other):
if type(other) in (int, float):
kwargs = {i: getattr(self, i) * other for i in vars(self)}
return self.__class__(**kwargs)
elif type(self) == type(other):
args = [getattr(self, i) * getattr(other, i) for i in vars(self)]
return sum(args)
return NotImplemented

# User Editable Region

def __eq__(self, other):
if type(self) != type(other):
return NotImplemented
return all(getattr(self, i) == getattr(other, i) for i in vars(self))
def __ne__(self,other):
if getattr(self) == getattr(other):
return False
else:
return True

# User 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 = R2Vector(x=0.5, y=1.25)
print(f'v1 = {v1}')
print(f'v2 = {v2}')
v3 = v1 + v2
print(f'v1 + v2 = {v3}')
v4 = v1 - v2
print(f'v1 - v2 = {v4}')
v5 = v1 * v2
print(f'v1 * v2 = {v5}')
``````

User Agent is: `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36`

### Challenge Information:

Learn Special Methods by Building a Vector Space - Step 61

Try removing `getattr()` leaving just `self` and `other`

Happy coding

``````Traceback (most recent call last):
File "./prog.py", line 6, in <module>
TypeError: getattr expected at least 2 arguments, got 1
``````

Put in some print statements and other support code to test what you write. You’d quickly get an error like this because you’ll see that `getattr()` needs two arguments.

https://www.w3schools.com/python/ref_func_getattr.asp

Get as much information as you can about how the program is executing, and try to rely only on yourself as much as possible to solve these before coming to the forum. It will make you a better programmer to learn to troubleshoot.

All of this is solvable and you don’t actually need help. You need to develop your toolkit for troubleshooting and investigating on your own.

The next time you run into a problem try to think what other evidence or information you might bring to the forum. Show what you tried and what other feedback you were able to drag out of the program.

For example if you added this print line:

``````def __eq__(self, other):
print(getattr(self)) # this line
if type(self) != type(other):
``````

and then added this at the end to run the `equals` functionality:

``````print(v1 == v2)
``````

You immediately get this feedback:

``````TypeError: getattr expected at least 2 arguments, got 1
``````

So you will know that’s not the correct approach and you know exactly what’s wrong. Coding is hard but these error messages are trying to help you out. Crucial skill to learn to test, generate errors and read them to know what’s wrong.