Python 3
Machine Learning

PENTRU ELEVII DE LICEU

LECȚIA 16
PAG. 2 / 4
OOP - Atribute și metode
Acasă >>> Lecții online

Atribute de instanță

În programarea orientată pe obiecte (OOP), când lucrăm cu clase în Python, e important să înțelegem bine ce înseamnă atributele de clasă și atributele de instanță. Aceste variabile (atribute) sunt elemente esențiale pentru a controla cum datele sunt stocate și accesate în obiectele create dintr-o clasă.

Revenim la clasa Masina, despre care am tot discutat anterior. O variabilă de instanță este o caracteristică specifică fiecărei mașini în parte, adică un atribut care aparține fiecărui obiect creat din clasa Masina. Am văzut că în Python le definim în metoda specială __init__, care este constructorul clasei, și le punem în fața lor prefixul self:

class Masina:
    def __init__(self, culoare, model, an):
        self.culoare = culoare # variabilă de instanță
        self.model = model # variabilă de instanță
        self.an = an # variabilă de instanță


Astfel, fiecare obiect creat cu clasa Masina va avea propriile valori pentru culoare, model și an. Bun! Până aici știam totul.

Ce sunt atributele de clasă?

Atributul de clasă este o variabilă care aparține clasei în sine, nu fiecărui obiect în parte. Toate obiectele create din clasa respectivă vor împărți aceeași variabilă de clasă.

Să spunem că vrem să contorizăm câte mașini au fost create din clasa Masina. Variabila care stochează această informație nu este o caracteristică a fiecărei mașini, ci a clasei în general.

Cum o definim? Simplu, o scriem direct în corpul clasei, fără să folosim cuvântul self.

Analizați codul complet mai jos:
Editor - exemplu_oop.py
       
Rezultatul în consolă done
Observație. Atributul numar_masini nu ține de o anumită mașină, ci de întreaga clasă. Dacă încerci să schimbi numar_masini pe o instanță, Python va crea o variabilă de instanță cu același nume, fără să afecteze variabila de clasă.

Atunci când creezi programe reale, trebuie să știi ce date sunt unice pentru fiecare obiect și ce date trebuie să fie împărtășite între toate obiectele.

Notă. Dacă încerci să stochezi ceva ce e comun tuturor obiectelor în variabile de instanță, pierzi eficiență și consistență. Pe de altă parte, dacă pui în atribute de clasă ceva ce ar trebui să fie unic pentru fiecare obiect, creezi confuzii și erori greu de detectat.
Avansează la pagina următoare.
 home   list  LECȚII   perm_identity   arrow_upward