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 trialAndy McDonald
Python Development Techdegree Graduate 13,801 PointsCouple questions about inheritance.
I feel like in earlier videos he was describing how the placement of the super() function would override anything passed in as an argument. In this video: https://teamtreehouse.com/library/multiple-superclasses he's passing things into methods' arguments in which an attribute is defined after the super function. I don't understand what that whole section was about...
Second, he is using super on a class within a script that is not defining any parent class. I was under the impression that python knew where to inherit when super() was called based on it having a defined parent class.
Can someone explain how it knows where to inherit and why it appears as though it doesnt matter when super() is called?
1 Answer
Chris Freeman
Treehouse Moderator 68,423 PointsHey Andy McDonald, this is a hard topic!
I’ve answered in depth on this topic in other posts (see here). I’ll try to loop back to add a better link.
In summary here, super()
, in simple terms, is a way to call a method of the same name that exists higher in the inheritance tree.
The class Thief
is intended to be a “mix-in” / “feature class”, that is, an inherited class that adds features to another class but is not intended to be to only class in the inheritance list. It expects other classes to be present after it in the inheritance list.
So why does it use super()
? It is because Thief
does not know about classes before or after it in the inheritance chain. It uses super()
because it does not want to break the chain of super()
calls needed to reach the last class in the inheritance list. Without super()
no further execute occurs – character.__init__
would not be reached.
So the super()
in Thief.__init__
results in a call to Agile.__init__
or whatever class is next.
Post back if you need more help. Good luck!!!