Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Understanding Method Resolution Order (MRO) in Python
📖 Scenario: Imagine you have a set of classes representing different types of vehicles. Some vehicles share common features, and some features come from multiple sources. You want to understand how Python decides which feature to use when there are multiple options.
🎯 Goal: You will create a set of classes with multiple inheritance and use Python's Method Resolution Order (MRO) to see how Python chooses which method to run.
📋 What You'll Learn
Create classes with inheritance
Use the super() function
Print the MRO of a class
Call methods to observe which one runs
💡 Why This Matters
🌍 Real World
Understanding MRO helps when working with complex class hierarchies, such as in frameworks or libraries that use multiple inheritance.
💼 Career
Many software development jobs require knowledge of object-oriented programming and how Python resolves methods in multiple inheritance scenarios.
Progress0 / 4 steps
1
Create base classes with a method
Create two classes called Car and Boat. Each class should have a method called move that prints exactly "Car is moving" and "Boat is moving" respectively.
Python
Hint
Define two classes with a method named move. Each method should print a different message.
2
Create a class with multiple inheritance
Create a class called AmphibiousVehicle that inherits from Car and Boat. Do not add any methods inside it.
Python
Hint
Define AmphibiousVehicle with Car and Boat inside parentheses to inherit from both.
3
Print the Method Resolution Order (MRO)
Print the MRO of the AmphibiousVehicle class using AmphibiousVehicle.__mro__.
Python
Hint
Use print(AmphibiousVehicle.__mro__) to see the order Python looks for methods.
4
Create an instance and call the method
Create an instance called vehicle of AmphibiousVehicle and call its move() method. Print the output.
Python
Hint
Create vehicle = AmphibiousVehicle() and then call vehicle.move() to see which method runs.
Practice
(1/5)
1. What does Method Resolution Order (MRO) in Python determine?
easy
A. The order Python compiles code
B. The order Python executes loops
C. The order Python looks for methods in inheritance
D. The order Python imports modules
Solution
Step 1: Understand MRO purpose
MRO defines the sequence Python follows to find methods in classes with inheritance.
Step 2: Compare options
Only The order Python looks for methods in inheritance correctly describes MRO's role in method lookup order.
Final Answer:
The order Python looks for methods in inheritance -> Option C
Quick Check:
MRO = method lookup order [OK]
Hint: MRO is about method search order in inheritance [OK]
Common Mistakes:
Confusing MRO with loop or import order
Thinking MRO controls code compilation
Mixing MRO with unrelated Python features
2. Which of the following is the correct way to check the MRO of a class MyClass in Python?
easy
A. print(MyClass.__mro__)
B. print(MyClass.get_mro())
C. print(MyClass.MRO())
D. print(MyClass.mro)
Solution
Step 1: Recall MRO access methods
Python provides __mro__ attribute and mro() method to check MRO.
Step 2: Identify correct syntax
MyClass.__mro__ is a tuple showing MRO; MyClass.mro() is a method returning a list. print(MyClass.__mro__) uses __mro__ correctly with print.
Final Answer:
print(MyClass.__mro__) -> Option A
Quick Check:
Use __mro__ attribute to check MRO [OK]
Hint: Use ClassName.__mro__ to see MRO tuple [OK]
Common Mistakes:
Using non-existent get_mro() method
Forgetting parentheses for mro() method
Trying to print mro without calling it
3. What will be the output of the following code?
class A:
def greet(self):
return 'Hello from A'
class B(A):
def greet(self):
return 'Hello from B'
class C(A):
def greet(self):
return 'Hello from C'
class D(B, C):
pass
print(D().greet())
medium
A. 'Hello from B'
B. 'Hello from A'
C. 'Hello from C'
D. Error: Ambiguous method
Solution
Step 1: Determine MRO of class D
Class D inherits from B and C. Python uses C3 linearization: D > B > C > A.
Step 2: Find first greet method in MRO
Method greet is found first in B, so D().greet() calls B's greet method.
Final Answer:
'Hello from B' -> Option A
Quick Check:
MRO order picks B's greet first [OK]
Hint: MRO checks parents left to right, first method wins [OK]
Common Mistakes:
Assuming C's greet is called instead of B's
Thinking A's greet is called directly
Expecting an error due to multiple inheritance
4. Consider the following code snippet. What is the error and how to fix it?
class X:
def method(self):
return 'X'
class Y:
def method(self):
return 'Y'
class Z(X, Y):
def method(self):
return super().method()
print(Z().method())
medium
A. Error: super() call is ambiguous; fix by specifying class and self
B. Output: 'X' (no error)
C. Output: 'Y' (no error)
D. Error: Missing parentheses in print statement
Solution
Step 1: Analyze super() in Z.method()
super() calls next method in MRO after Z, which is X.method().
Step 2: Check output of X.method()
X.method() returns 'X', so print outputs 'X' with no error.
Final Answer:
Output: 'X' (no error) -> Option B
Quick Check:
super() calls next in MRO, here X.method() [OK]
Hint: super() calls next method in MRO automatically [OK]
Common Mistakes:
Thinking super() needs explicit class and self
Expecting output 'Y' instead of 'X'
Assuming syntax error in print statement
5. Given the classes below, what is the MRO of class F?
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
class E(C, B): pass
class F(D, E): pass
hard
A. (F, E, D, B, C, A, object)
B. (F, D, E, B, C, A, object)
C. (F, D, B, C, E, C, B, A, object)
D. TypeError due to inconsistent MRO
Solution
Step 1: Understand MRO consistency rules
Python requires MRO to be consistent and follow C3 linearization rules.
Step 2: Check classes D and E inheritance
D inherits B then C; E inherits C then B. This creates conflicting order for F inheriting D and E.
Step 3: Result of conflict
Python raises TypeError for class F due to inconsistent MRO from conflicting parent orders.
Final Answer:
TypeError due to inconsistent MRO -> Option D
Quick Check:
Conflicting parent order causes TypeError [OK]
Hint: Conflicting parent order causes MRO TypeError [OK]