Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Object-Oriented Python Advanced Objects Multiplication

Dmitriy Ignatiev
PLUS
Dmitriy Ignatiev
Courses Plus Student 6,236 Points

__mul__

What's wrong with my code

numstring.py
class NumString:
    def __init__(self, value):
        self.value = str(value)

    def __str__(self):
         return self.value

    def __int__(self):
        return int(self.value)

    def __float__(self):
        return float(self.value)

    def __add__(self, other):
        if '.' in self.value:
            return float(self) + other
        return int(self) + other

    def __radd__(self, other):
        return self + other

    def __iadd__(self, other):
        self.value = self + other
        return self.value

     def __mul__(self, other):
        return self.value * other

    def __rmul__(self, other):
        return self.value * other

2 Answers

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 68,457 Points

The __mul__ should return the correct value type depending if the string represents a float or an int. Check if string contains a period indicating a float. Convert value to float or int accordingly.

Also, __rmul__ will call __mul__, use "self" instead of "self.value". And watch the indentation.

Gilbert Craig
Gilbert Craig
2,102 Points

I applied your suggestion but am still getting the same error

    def _mul__(self, other):
        if '.' in self.value:
            return float(self) * other
        return int(self) * other

    def __rmul__(self, other):
        return self * other
Chris Freeman
Chris Freeman
Treehouse Moderator 68,457 Points

So close Gilbert! You're missing an underscore before _mul__

Dmitry Bruhanov
Dmitry Bruhanov
8,513 Points

Dima, Hi!

The answer is in the question))

for the mul function: Copy the body of add and replace the '+' sign with the '*' sign.

Do the same with radd and rmul and you're done))