Didaxis
lecție · Informatică

Clase și obiecte

Clase predefinite, obiecte și membri.

Se face în:
Clasa a IX-a
Clasa a XI-a
Clasa a XII-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 2 · rezumatul lecției

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.

Desen la lecția „Clase și obiecte”
2în detaliustratul 2 din 2 · pentru clasă și Bacalaureat

Î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 obiectul ana sunt 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: self este numele obligatoriu al obiectului din apelant.
    Corect: este parametrul prin care metoda primește instanța curentă.
în contul tăuPremium

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

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.