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 Dice Roller Giving a Hand

Akshaan Mazumdar
Akshaan Mazumdar
3,787 Points

Why do we call super in the Hand class >(class Hand (list):) when it does not actually extend from any other superclass?

The first class we make we see Hand actually act as a list .But why have we called super().__init__ in it?

2 Answers

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 68,423 Points

Good question! When sub-classing, or extending, another class, all of the methods of the parent class are automatically available, including the __init__ method.

If you create a method in the sub-class with the same name as a method in the parent class, the local sub-class version will override the parent version. The parent version will not be executed unless explicitly called. The super() function is used to explicitly call the method from the parent class.

In this case, super allows the __init__ from the parent list to also run to initiate.

In classes of multiple inheritance, each parent also typically includes a super() call so the next parent in the chain can run it’s __init__. If you want to subclass Hand further, you want the super call so it can also be used in multiple inheritance.

Post back if you need more help. Good luck!!!

Akshaan Mazumdar
Akshaan Mazumdar
3,787 Points

Got it ! So to sum it up the super in Hand is meant to override or call the init in //list//.

Also if we subclass (int) will we use super ?

Chris Freeman
Chris Freeman
Treehouse Moderator 68,423 Points

In general, you will need to use super() when subclassing.

For immutable types such as int and str you cannot modify them once they have been created, so you’d have to use super().__new__() instead of super()__init__()

Jay Reyes
seal-mask
.a{fill-rule:evenodd;}techdegree
Jay Reyes
Python Web Development Techdegree Student 15,937 Points

Chris Freeman - When we super().__init__ the parent class: are we only in the scope of that class's __init__ method (therefore excluding methods outside of the __init__ but still inside the class)? Or are we in the scope of the entire class - so we also "import" all the methods and attributes there?

Chris Freeman
Chris Freeman
Treehouse Moderator 68,423 Points

@Jay Reyes, I don't know if I would use the word "scope". Using super() says "search the parents namespace for a method". Extending to super().__init__() it is specifically referencing the __init__ in the parent class. The methods of the parent class are automatically present in the current class if they have not been overridden locally. In the case of __init__ it has been overridden, so super() is needed to access the parent's version of the method.