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.
Andy McDonaldPython Development Techdegree Graduate 12,668 Points
Couple 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?
Chris FreemanTreehouse Moderator 68,082 Points
Hey 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.
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.
Thief.__init__ results in a call to
Agile.__init__ or whatever class is next.
Post back if you need more help. Good luck!!!