Ce face class
O clasă descrie un tip de obiect. Metoda specială __init__ rulează când creezi un obiect și setează atributele lui. Primul parametru al fiecărei metode este self: obiectul pe care a fost apelată metoda.
O clasă poate moșteni altă clasă (class Student(Persoana)): primește toate metodele ei și le poate înlocui sau extinde, apelând versiunea părintelui cu super().
Metodele cu nume între două underscore-uri (__str__, __repr__, __eq__, __len__) definesc cum se comportă obiectul cu print(), ==, len() și alte operații. Pentru clase care doar păstrează date, vezi și dataclasses.
Exemple
Exemplul 1: O clasă simplă
class ContBancar:
def __init__(self, titular, sold=0):
self.titular = titular
self.sold = sold
def depune(self, suma):
self.sold += suma
return self.sold
cont = ContBancar("Ana")
cont.depune(500)
cont.depune(250)
print(cont.titular, cont.sold)
Rezultat
Ana 750
Exemplul 2: __str__ pentru afișare
class Produs:
def __init__(self, nume, pret):
self.nume = nume
self.pret = pret
def __str__(self):
return f"{self.nume} ({self.pret:.2f} lei)"
def __repr__(self):
return f"Produs({self.nume!r}, {self.pret})"
p = Produs("Cafea", 32.9)
print(p)
print([p])
Rezultat
Cafea (32.90 lei)
[Produs('Cafea', 32.9)]
Exemplul 3: Moștenire și super()
class Persoana:
def __init__(self, nume):
self.nume = nume
def prezentare(self):
return f"Sunt {self.nume}."
class Student(Persoana):
def __init__(self, nume, facultate):
super().__init__(nume)
self.facultate = facultate
def prezentare(self):
return super().prezentare() + f" Studiez la {self.facultate}."
print(Student("Ioana", "Informatică").prezentare())
print(isinstance(Student("Dan", "Drept"), Persoana))
Rezultat
Sunt Ioana. Studiez la Informatică.
True
Greșeli frecvente
- Uiți
selfca prim parametru al unei metode și primeștiTypeError: ... takes 0 positional arguments but 1 was given. - Scrii
titular = titularîn__init__în loc deself.titular = titular. Valoarea rămâne într-o variabilă locală și se pierde. - Definești o listă direct în corpul clasei (
class Cos: produse = []). Ea este comună tuturor obiectelor; creeaz-o în__init__.
Comenzi înrudite
super(): Apelează metoda clasei părinte dintr-o clasă care o moștenește.property(): Transformă o metodă într-un atribut calculat, cu verificare la citire și la scriere.isinstance() și issubclass(): Verifică dacă un obiect este de un anumit tip, sau dacă o clasă moștenește alta.classmethod() și staticmethod(): Metode care primesc clasa în loc de obiect (classmethod) sau nu primesc nici clasa, nici obiectul (staticmethod).