Sobes.tech
Middle

Kas yra property dekoratorius ir kam jis naudojamas Python'e?

sobes.tech AI

Atsakymas iš AI

property yra įmontuotas dekoratorius Python kalboje, leidžiantis apibrėžti klasės savybes, kurios veikia kaip atributai prieigos metu, tačiau gali turėti savo getter, setter ir deleter metodus:

Naudojimas:

  1. Prieigos prieigų valdymas: leidžia atlikti validaciją, duomenų konvertavimą ar kitus veiksmus gaunant ar nustatant atributo reikšmę.
  2. Apskaičiuojamų atributų kūrimas: atributas gali nesaugoti reikšmės tiesiogiai, o ją apskaičiuoti kiekvieną kartą kreipiantis.
  3. Pereinamas nuo viešųjų atributų prie prieigos metodų: galima pradėti nuo paprasto viešo atributo ir pridėti logiką naudojant @property be kodo keitimo, kuris naudoja šį atributą.
  4. Getter/setter logikos pakartotinis naudojimas: vienam ir tam pačiam atributui galima apibrėžti getter, setter ir deleter. Su šių operacijų logika galima susitelkti vienoje vietoje.
class MyClass:
    def __init__(self, value):
        self._value = value  # Privatinis atributas

    @property
    def value(self):  # Getter
        """Grąžina reikšmę."""
        print("Accessed value")
        return self._value

    @value.setter
    def value(self, new_value):  # Setter
        """Nustato naują reikšmę."""
        if not isinstance(new_value, (int, float)):
            raise TypeError("Value must be a number")
        print(f"Setting value to {new_value}")
        self._value = new_value

    @value.deleter
    def value(self):  # Deleter
        """Ištrina reikšmę."""
        print("Deleting value")
        del self._value

# Pavyzdys naudojimo
obj = MyClass(10)
print(obj.value)  # Iškviečia getter
obj.value = 20   # Iškviečia setter
print(obj.value)
# del obj.value   # Iškviečia deleter - būkite atsargūs, gali sukelti klaidų jei atributas vėliau naudojamas