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

Your code so far

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

    def __add__(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 __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}')

Your browser information:

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

Hi @Mr.Merati

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.