super() în Python

Clase și obiecte Python 3.0+

Apelează metoda clasei părinte dintr-o clasă care o moștenește.

Sintaxă
super().metoda(...)

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.