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 Inheritance Multiple Superclasses

Andy McDonald
.a{fill-rule:evenodd;}techdegree seal-36
Andy McDonald
Python 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?

1 Answer

Chris Freeman
Chris Freeman
Treehouse 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.

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!!!