Learn Special Methods by Building a Vector Space - Step 23

Tell us what’s happening:

I don’t understand the instructions. How do I use getattr? And the help talking about vars(self) doesn’t help…

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 f'({", ".join(str(i) for i in getattr(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 (X11; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0

Challenge Information:

Learn Special Methods by Building a Vector Space - Step 23

getattr() function is what you need. It takes an object as its first argument, and a string containing the attribute name as its second attribute.

So, getattr() will take 2 arguments: object, attribute

getattr(object, 'attribute')

Use vars(self) to iterate through the object attributes as you did in a previous step.

replacing the string returned by __str__() with a generator expression

You are still returning a string. Instead, you want to return a generator expression, which will be a comprehension in (parentheses)

Thank you! I was not sure about the return type. Often the steps are too many. It could be easier if several steps were grouped together.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.