## Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

### Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today. # Is __iadd__ method supposed to change the data type of NumString?

Following the example in the video, adding an integer in place to an object of NumString class seems to change its data type.

Is this an expected behavior (perhaps it stems from the fact that adding the object with a number returns either float or int thus overwrite the original object)? Should we simply return `self` instead of `self.value` in the `__iadd__` method? Or did I miss something?

I had the same question on this and I believe that is what's happening. The code given in the video is:

```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)

if '.' in self.value:
return float(self) + other
else:
return int(self) + other

return self + other

self.value = self + other
return self.value
```

Then the example usage is:

```>>> age = NumString(25)
>>> age += 1
>>> age
26
```

If age was still a NumString object, typing only ">>> age" into the console should have output something like "<numstring.NumString object at 0x7f4e251826d8>"

Looking at the Python documentation on iadd, using age += 1 is equivalent to age = age.iadd(1), so the return value of iadd is being assigned back to age, in this case the integer 26.

I tried a different implementation by returning self, rather than self.value. Additionally, I also converted the result of the add operation to a str, since the NumString object is expecting a string for its value attribute.

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

This seems to do what's expected:

```>>> age = NumString(25)
>>> age += 1
>>> age
<numstring.NumString object at 0x7f5fe6cdb668>
>>> print(age)
26
```