Pe scurt
O clasă descrie ce date și operații au obiectele de un anumit fel. Un obiect este o instanță concretă. Clasa Elev poate defini câmpurile nume și nota; obiectele pentru Ana și Dan au valori proprii. Metodele sunt funcții asociate clasei și pot lucra cu datele obiectului.
În Python, class Elev: pass definește o clasă minimă, iar e=Elev() creează un obiect al ei.
În detaliu
O clasă descrie ce date și ce operații au obiectele de un anumit fel; un obiect este o instanță concretă a clasei. Datele se păstrează în atribute (câmpuri), iar operațiile sunt metode, adică funcții definite în clasă care lucrează cu datele obiectului. Metoda specială __init__ este constructorul: se apelează la crearea obiectului și inițializează atributele. Primul parametru al fiecărei metode, self, indică instanța curentă. Fiecare obiect își păstrează separat atributele de instanță, deci schimbarea unui atribut al unui obiect nu influențează celelalte obiecte ale clasei.
Exemplul 1 — atribute de instanță. Clasa Elev are atributele nume și nota:
class Elev:
def __init__(self, nume, nota):
self.nume = nume
self.nota = nota
ana = Elev("Ana", 9)
dan = Elev("Dan", 7)
print(ana.nume, dan.nota)
Constructorul primește valorile fiecărui obiect. Se afișează Ana 7. Dacă se execută ana.nota = 10, valoarea dan.nota rămâne 7, deoarece ana și dan sunt obiecte distincte. Clasa Elev și obiectul ana nu sunt același lucru: clasa definește tipul, iar obiectul este o instanță.
Exemplul 2 — o metodă care lucrează cu datele obiectului. Clasa păstrează lista notelor și calculează media:
class Elev:
def __init__(self, nume):
self.nume = nume
self.note = []
def adauga_nota(self, n):
self.note.append(n)
def media(self):
return sum(self.note) / len(self.note)
ana = Elev("Ana")
dan = Elev("Dan")
ana.adauga_nota(9)
ana.adauga_nota(8)
dan.adauga_nota(7)
print(ana.media(), dan.media())
print(len(ana.note), len(dan.note))
Se afișează 8.5 7.0, apoi 2 1. Apelul ana.media() transmite automat obiectul ana ca self, deci metoda calculează media notelor Anei, , iar dan.media() pe cea a lui Dan. Lista note este creată separat în fiecare constructor, deci Ana și Dan nu împart aceeași listă.
Caz-limită. Dacă pentru un elev nu s-a adăugat nicio notă, lista note este goală, iar media() împarte la len(self.note), adică la 0, și se oprește cu eroarea ZeroDivisionError. Metoda trebuie să verifice întâi if not self.note: și să întoarcă o valoare convenită, de exemplu None.
Exemplul 3 — atribut de clasă și reprezentare text. Un atribut definit în corpul clasei, nu în constructor, este atribut de clasă și este comun tuturor instanțelor. Metoda __str__ stabilește textul afișat de print:
class Elev:
numar = 0
def __init__(self, nume):
self.nume = nume
Elev.numar += 1
def __str__(self):
return "Elev " + self.nume
ana = Elev("Ana")
dan = Elev("Dan")
print(Elev.numar)
print(ana)
Se afișează 2, apoi Elev Ana. Contorul numar există o singură dată, în clasă, și crește la fiecare creare a unui obiect, în timp ce nume există separat în ana și în dan.
Exemplul 4 — o metodă care poate refuza o operație, și două nume pentru același obiect. Clasa Cont păstrează un sold, iar metoda retrage verifică dacă suma cerută se poate scoate:
class Cont:
def __init__(self, sold):
self.sold = sold
def depune(self, suma):
self.sold += suma
def retrage(self, suma):
if suma > self.sold:
return False
self.sold -= suma
return True
c = Cont(100)
c.depune(50)
print(c.retrage(200), c.sold)
print(c.retrage(70), c.sold)
d = c
d.depune(20)
print(c.sold)
Pas cu pas: după depune(50) soldul este 150. Cererea de 200 depășește soldul, deci retrage întoarce False, iar soldul rămâne 150; se afișează False 150. Cererea de 70 se poate onora, soldul devine 80 și se afișează True 80. Atribuirea d = c nu creează un obiect nou, ci un al doilea nume pentru același obiect, așa că d.depune(20) modifică și c: se afișează 100. Pentru o copie independentă trebuie creat explicit un alt obiect, cu Cont(c.sold).
Clasele predefinite. Clasele predefinite din Python urmează aceeași idee: lista = [2, 4] creează un obiect al clasei list, iar lista.append(6) apelează o metodă a lui. După apel, obiectul conține . Clasa proprie Elev permite definirea unor membri potriviți problemei, în loc de folosirea doar a tipurilor gata oferite. În lecția „Principii de programare orientată pe obiecte” sunt explicate organizarea responsabilităților și reutilizarea prin relații între clase.
Greșeli frecvente
- Greșit: clasa
Elevși obiectulanasunt același lucru.Corect: clasa definește tipul, obiectul este o instanță. - Greșit: toate obiectele unei clase împart automat aceleași valori ale atributelor de instanță.Corect: fiecare instanță le păstrează separat.
- Greșit:
selfeste numele obligatoriu al obiectului din apelant.Corect: este parametrul prin care metoda primește instanța curentă.
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633 și 1653–1654; OMEC 4370/2026, anexa 8, p. 155–156; rocnee.eu
- OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633; rocnee.eu
- OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1653–1654; rocnee.eu
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa XI intensiv; rocnee.eu
- OMECI 5099/2009, anexa 5, Informatică, p. 3–4, 8, clasa XII; rocnee.eu
Documente consultate
- Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42), p. 1632–1633 și 1653–1654; rocnee.eu
- Programa școlară de informatică intensiv, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE, p. 4–5; rocnee.eu
- Python Software Foundation, Python Tutorial, capitolul 9 „Classes”, docs.python.org/3/tutorial/classes.html
Desene: Redactare proprie (desen original), conform OMEC 6930/2025, Informatică IX, MO 4 bis/2026, p. 1632–1633 și 1653–1654; rocnee.eu
