property() în Python

Clase și obiecte Python 3.0+

Transformă o metodă într-un atribut calculat, cu verificare la citire și la scriere.

Sintaxă
@property
def atribut(self): ...
@atribut.setter
def atribut(self, valoare): ...

Ce face property()

Cu decoratorul @property, o metodă se citește ca un atribut, fără paranteze: cerc.aria în loc de cerc.aria(). Cu @nume.setter adaugi codul care rulează la atribuire, de exemplu o validare.

Astfel poți începe cu atribute simple și adăuga mai târziu logică, fără să schimbi codul care folosește clasa. Fără setter, atributul este doar pentru citire.

Parametri

Parametru Descriere
fget, fset, fdel, doc Forma ca funcție: metodele de citire, scriere, ștergere și documentația. De obicei se folosește forma cu decorator.

Ce returnează

Un obiect property.

Exemple

Exemplul 1: Atribut calculat și validare

class Produs:
    def __init__(self, nume, pret):
        self.nume = nume
        self.pret = pret

    @property
    def pret(self):
        return self._pret

    @pret.setter
    def pret(self, valoare):
        if valoare < 0:
            raise ValueError("Prețul nu poate fi negativ")
        self._pret = valoare

    @property
    def pret_cu_tva(self):
        return round(self.pret * 1.21, 2)

p = Produs("Cafea", 30)
print(p.pret, p.pret_cu_tva)
p.pret = 40
print(p.pret_cu_tva)
try:
    p.pret = -5
except ValueError as e:
    print("Eroare:", e)

Rezultat

30 36.3
48.4
Eroare: Prețul nu poate fi negativ

Greșeli frecvente

  • În setter scrii self.pret = valoare în loc de self._pret = valoare. Setter-ul se apelează pe el însuși la infinit și primești RecursionError.
  • Încerci să atribui unei proprietăți fără setter și primești AttributeError: property ... has no setter.

Comenzi înrudite

  • class: Definește o clasă: un șablon pentru obiecte care au date (atribute) și comportament (metode).
  • classmethod() și staticmethod(): Metode care primesc clasa în loc de obiect (classmethod) sau nu primesc nici clasa, nici obiectul (staticmethod).
  • functools.cached_property: O proprietate calculată o singură dată per obiect, apoi păstrată ca atribut obișnuit.