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.

Python Object-Oriented Python Advanced Objects Double

Create a new int instance from __new__

Now override new. Create a new int instance from whatever is passed in as arguments and keyword arguments. Return that instance. You should remove the pass.

doubler.py
class Double(int):
    def __new__(*args, **kwargs):

the def new(*args, **kwargs): is my code, it could be wrong!

4 Answers

Qasa Lee
Qasa Lee
18,915 Points
class Double(int):
    def __new__(*args,**kwargs):
        return int.__new__(*args,**kwargs)

Here is what I've done to pass that challenge. Perhaps it's helpful to other visitors.

Thanks for your code. It helps me to learn.

Steven Parker
Steven Parker
221,070 Points

You're good so far, but you haven't finished this task yet. You still need the body of the method where you call the __new__ of the base class and then return what it creates.

Steven Parker
Steven Parker
221,070 Points

I'd appreciate feedback from whoever down-voted this answer to help me improve.

Something tells me it was down-voted because it didn't explicitly give out the answer.

Steven Parker
Steven Parker
221,070 Points

You may be right, but that's not a good use of downvoting. I think most people have a better learning experience when they resolve an issue themselves with assistance rather than having it resolved for them. The fact that in the last year it got enough up-votes to make it no longer possible to tell it was ever downvoted ir probably a good indication that many other students agree.

Tatiane Lima
Tatiane Lima
6,738 Points

I Wrote this code:

class Double(int):
    def __new__(self, *args, **kwargs):
        try:
            item = int.__new__(self, *args, **kwargs)
        except:
            item = self.__new__(self, *args, **kwargs)
        return item

It was showing me an error message, then i got that i need to treat the error. Then i storaged the atribute passing by int method in a variable and check if it is an int type, if it is not, i do the same but i do it using the "self" notation.

I'm not sure if it is the right way to do it, but it worked.

(sorry about my english)

First, there's no need to apologize for your English. It reads well.

From what I can tell, your code is redundant. I'm guessing you started with the 'try' block and the error that popped was saying there was no 'except' case. Putting in the except case removed the error, but didn't fix the problem. It actually never gets read.

I may be wrong, but what I see is the code 'trying' to assign the variable 'item' the value of:

int.new(self, *args, **kwargs)

This will succeed every time, as you're initializing a variable and assigning it a value in the same phrase. Because your 'try' is programmed to succeed everytime, your code will never touch the 'except' case, though it's required for every 'try' case.

TLDR: Instead of trying to assign a variable called 'item' the value of ""int.new(self, *args, **kwargs)"", simply return that value.