Learn Special Methods by Building a Vector Space - Step 23

Tell us what’s happening:

Okay, what am I doing wrong here? It is still telling to iterate over vars(self)

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

# User Editable Region

    def __str__(self):
        return getattr(self,(i 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 = R3Vector(x=2, y=2, z=3)
print(v1.norm())
print(v2.norm())

Your browser information:

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

Challenge Information:

Learn Special Methods by Building a Vector Space - Step 23

This is very close there is just a problem with the way you are placing the brackets.

I’m not sure exactly how to describe this:

Your generator cannot be inside the getattr() because the generator will generate all it’s values and then execute getattr() once.

getattr() needs to be within your generator expression so it executes for every value of i