Ce face super()
Într-o subclasă, super().metoda() apelează versiunea metodei din clasa părinte. Cel mai des apare în __init__, ca să inițializezi partea moștenită înainte de a adăuga atribute noi.
În Python 3, super() se scrie fără argumente în interiorul metodelor. La moștenirea multiplă, super() urmează ordinea de rezolvare a metodelor (MRO), vizibilă în Clasa.__mro__.
Parametri
| Parametru | Descriere |
|---|---|
type, obj |
Opțional, forma veche: super(Clasa, self). Nu mai este necesară în Python 3. |
Ce returnează
Un obiect intermediar prin care apelezi metodele părintelui.
Exemple
Exemplul 1: Extinderea lui __init__
class Angajat:
def __init__(self, nume, salariu):
self.nume = nume
self.salariu = salariu
def descriere(self):
return f"{self.nume}, {self.salariu} lei"
class Manager(Angajat):
def __init__(self, nume, salariu, echipa):
super().__init__(nume, salariu)
self.echipa = echipa
def descriere(self):
return super().descriere() + f", echipă de {len(self.echipa)}"
m = Manager("Ioana", 9000, ["Ana", "Dan"])
print(m.descriere())
Rezultat
Ioana, 9000 lei, echipă de 2
Exemplul 2: Ordinea metodelor la moștenire multiplă
class A:
def salut(self): return "A"
class B(A):
def salut(self): return "B" + super().salut()
class C(A):
def salut(self): return "C" + super().salut()
class D(B, C):
def salut(self): return "D" + super().salut()
print(D().salut())
print([k.__name__ for k in D.__mro__])
Rezultat
DBCA
['D', 'B', 'C', 'A', 'object']
Greșeli frecvente
- Uiți să apelezi
super().__init__(...)în subclasă, iar atributele părintelui nu există:AttributeError.
Comenzi înrudite
class: Definește o clasă: un șablon pentru obiecte care au date (atribute) și comportament (metode).isinstance() și issubclass(): Verifică dacă un obiect este de un anumit tip, sau dacă o clasă moștenește alta.object(): Clasa de bază a tuturor claselor; object() creează un obiect gol, unic.