Concept Flow - Diamond problem
Class A
Class B
Class D
Create instance of D
Method call
Resolve method via MRO
Execute method
Shows how Python resolves method calls in a diamond inheritance pattern using Method Resolution Order (MRO).
class A: def greet(self): print('Hello from A') class B(A): def greet(self): print('Hello from B') class C(A): def greet(self): print('Hello from C') class D(B, C): pass obj = D() obj.greet()
| Step | Action | Evaluation | Result |
|---|---|---|---|
| 1 | Create class A with greet() | Method greet defined in A | A.greet() available |
| 2 | Create class B inheriting A with greet() | Overrides greet() | B.greet() available |
| 3 | Create class C inheriting A with greet() | Overrides greet() | C.greet() available |
| 4 | Create class D inheriting B and C | No greet() defined | D inherits from B and C |
| 5 | Create instance obj of D | obj is instance of D | obj ready |
| 6 | Call obj.greet() | Look for greet in D | Not found in D |
| 7 | Check B for greet() | Found greet() in B | Use B.greet() |
| 8 | Execute B.greet() | Prints 'Hello from B' | Output: Hello from B |
| 9 | End | Method call complete | Execution stops |
| Variable | Start | After Step 5 | After Step 6 | After Step 7 | Final |
|---|---|---|---|---|---|
| obj | undefined | instance of D | instance of D | instance of D | instance of D |
Diamond problem occurs when a class inherits from two classes that share a common ancestor. Python solves this using Method Resolution Order (MRO). MRO defines a linear order to search methods. In diamond shape, MRO prevents ambiguity by choosing one path. Use class.__mro__ to see the order. Method calls follow this order to find the right method.