class în Python

Clase și obiecte Python 3.0+

Definește o clasă: un șablon pentru obiecte care au date (atribute) și comportament (metode).

Sintaxă
class NumeClasa(ClasaParinte):
    def __init__(self, ...):
        self.atribut = ...

    def metoda(self, ...):
        ...

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 self ca prim parametru al unei metode și primești TypeError: ... takes 0 positional arguments but 1 was given.
  • Scrii titular = titular în __init__ în loc de self.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).