Learn Special Methods by Building a Vector Space - Step 52

Tell us what’s happening:

The instructions are misleading, as I have read and followed all instructions. There are no errors, but it doesn´t pass!

  1. Your method should return a new instance of the current class only when the type of other is either int or float.
  2. The vector resulting from the scalar multiplication should have each component of the starting vector multiplied by the scalar.
    // tests completed

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)

# User Editable Region

    def __mul__(self, other):
        if type(other) == type(int or float):
            kwargs = {i: getattr(self, i)*other for i in vars(self)}
       

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

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36

Challenge Information:

Learn Special Methods by Building a Vector Space - Step 52

What __mul__ method returns?

1 Like

Thanks!
Still not passing
def _mul_(self, other):

   if type(other) == type(int, float):

        kwargs = {i: getattr(self, i)*other for i in vars(self)}

    return self.__class__(**kwargs)

I aslo tried:

# if type(self) != type(other):

# return NotImplemented

# kwargs = {i: getattr(self, i)*other for i in vars(self)}

# return self._class_(**kwargs)

Don´t pass, either.

Hi @70N10

Your method should return a new instance of the current class only when the type of other is either int or float.

Copy and paste the following code into the console, on the last line:

print(type(int, float))

Happy coding

1 Like