`super()` — calling parent methods
2.1.9· Coding › OOP Fundamentals
super() KYA hai?
Toh iske bajaay:
class Dog(Animal):
def __init__(self, name):
Animal.__init__(self, name) # hard-coded parent nametum likhte ho:
class Dog(Animal):
def __init__(self, name):
super().__init__(name) # decoupled from parent nameYEH kyun exist karta hai? (woh problem jo yeh solve karta hai)
YEH kaise kaam karta hai — first principles se derive kiya hua
Koi magic nahi hai. super() bas Parent.method(self) hi hai lekin parent ko dynamically MRO ke through choose kiya jaata hai.
Step 1 — har class ka ek MRO hota hai. Python ek linear order of classes compute karta hai kisi attribute ko search karne ke liye. Ise dekho:
Dog.__mro__ # (Dog, Animal, object)Step 2 — class C ke method ke andar super() ka matlab hai:
"
type(self)ke MRO meinCke baad wali position se search shuru karo, aurselfbind karo."
Step 3 — equivalence derive karo. Dog.__init__ ke andar, super() conceptually yeh hai:
jo type(self).__mro__ mein Dog ke baad wali class (yahan Animal) dhoondta hai aur uska method self ke saath call karta hai jo pehle se supplied hai. Isliye tum super().__init__(name) likhte ho aur nahi super().__init__(self, name) — self automatically inject ho jaata hai.

Worked Example 1 — __init__ extend karna
class Animal:
def __init__(self, name):
self.name = name
self.legs = 4
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # parent sets name + legs
self.breed = breed # child adds extra state
d = Dog("Rex", "Lab")
print(d.name, d.legs, d.breed) # Rex 4 Labsuper().__init__(name)pehle kyun? Taakiself.nameaurself.legschild ke apne attributes add karne se pehle exist karein — child extend karta hai, replace nahi karta.selfkyun nahi? Proxy ne alreadyselfbind kar liya hai; dobara pass karne par "got multiple values for argument" error aata hai.
Worked Example 2 — ek normal method extend karna
class Logger:
def save(self, data):
print("validating", data)
return True
class TimestampLogger(Logger):
def save(self, data):
ok = super().save(data) # reuse parent's validation
print("saved at 12:00", data)
return ok- Validation copy karne ki jagah
super().savekyun call karte hain? AgarLoggermein validation logic change ho, to child automatically sahi rehta hai (single source of truth).
Worked Example 3 — multiple inheritance aur MRO
class A:
def __init__(self): print("A"); super().__init__()
class B(A):
def __init__(self): print("B"); super().__init__()
class C(A):
def __init__(self): print("C"); super().__init__()
class D(B, C):
def __init__(self): print("D"); super().__init__()
D() # prints D B C A (each ONCE)
print([c.__name__ for c in D.__mro__]) # D B C A objectD B C Akyun aurD B A C Akyun nahi? KyunkiBmeinsuper()ka matlab "go toA" nahi hai — iska matlab hai "Dke MRO mein next class pe jao," joChai. MRO guarantee karta hai kiAexactly ek baar run ho. Yeh woh killer feature hai jo tumA.__init__(self)se nahi paa sakte.
Recall Feynman: ek 12-saal ke bachche ko explain karo
Socho tumhare papa ke paas soup ki recipe hai. Tum wohi soup banana chahte ho lekin upar se cheese daalna chahte ho. Poori recipe dobara likhne ki jagah tum kehte ho "Papa, apna soup banao" (super()), aur phir tum cheese chirakate ho. Agar Papa apna soup improve karein, tumhara bhi automatically better ho jaata hai — free mein. super() bas "family line mein mujhse upar wale ko" bulaana hai taaki woh apna hissa pehle kar sakein.
Flashcards
super() kya return karta hai?
super().__init__(name) kyun likhte hain aur super().__init__(self, name) kyun nahi?
self bind kar chuka hai; dobara pass karne par "multiple values for argument self" error aata hai.Multiple inheritance mein, kya super() ka matlab "parent class" hai?
type(self).__mro__ mein next class, jo ek sibling bhi ho sakta hai.Agar tum __init__ override karo aur kabhi super().__init__() call na karo, toh kya hoga?
AttributeError aayega.class D(B,C) ke liye jahan B(A), C(A) ho, D ka MRO kya hai?
Diamond mein super() use karne se base class sirf ek baar kyun run hoti hai?
super() ek hi linearized MRO mein aage badhta hai, isliye har class exactly ek baar visit hoti hai.super() ka Parent.__init__(self) par ek concrete advantage?
Connections
- Inheritance — extending classes
- Method Resolution Order (MRO) & C3 Linearization
- Method Overriding vs Overloading
- Multiple Inheritance & the Diamond Problem
- `__init__` — constructors
- Composition over Inheritance