Konstrukcija svojstva () vraća svojstvo svojstva.
Sintaksa property()
je:
svojstvo (fget = None, fset = None, fdel = None, doc = None)
Preporučeno čitanje: Python @property: Kako ga koristiti i zašto?
svojstva () Parametri
property()
Traje četiri izborne parametre:
- fget (nije obavezno) - funkcija za dobivanje vrijednosti atributa. Zadane vrijednosti
None
. - fset (nije obavezno) - funkcija za postavljanje vrijednosti atributa. Zadane vrijednosti
None
. - fdel (nije obavezno) - Funkcija za brisanje vrijednosti atributa. Zadane vrijednosti
None
. - doc (nije obavezno) - niz koji sadrži dokumentaciju (docstring) za atribut. Zadane vrijednosti
None
.
Povratna vrijednost iz svojstva ()
property()
vraća svojstvo svojstva od datog getera, postavljača i brisača.
- Ako se ne daju argumenti,
property()
vraća osnovni atribut svojstva koji ne sadrži getter, setter ili deleter. - Ako doc nije osiguran,
property()
uzima docstring funkcije getter.
Primjer 1: Stvorite atribut pomoću getera, postavljača i brisača
class Person: def __init__(self, name): self._name = name def get_name(self): print('Getting name') return self._name def set_name(self, value): print('Setting name to ' + value) self._name = value def del_name(self): print('Deleting name') del self._name # Set property to use get_name, set_name # and del_name methods name = property(get_name, set_name, del_name, 'Name property') p = Person('Adam') print(p.name) p.name = 'John' del p.name
Izlaz
Dobivanje imena Ime je: Adam Postavljanje imena na John Brisanje imena
Ovdje se _name koristi kao privatna varijabla za pohranu imena Osobe.
Također smo postavili:
- getterska metoda
get_name()
za dobivanje imena osobe, - metoda
set_name()
postavljača za postavljanje imena osobe, - metoda
del_name()
brisanja za brisanje imena osobe.
Sada postavljamo novo ime atributa svojstva pozivanjem property()
metode.
Kao što je prikazano u programu, pozivanje p.name
internih poziva get_name()
kao getera, set_name()
postavljača i del_name()
brisača kroz ispisani izlaz prisutan unutar metoda.
Primjer 2: Korištenje @property dekoratera
Umjesto da koristite property()
, možete koristiti Python dekorator @property
za dodjeljivanje getera, postavljača i brisača.
class Person: def __init__(self, name): self._name = name @property def name(self): print('Getting name') return self._name @name.setter def name(self, value): print('Setting name to ' + value) self._name = value @name.deleter def name(self): print('Deleting name') del self._name p = Person('Adam') print('The name is:', p.name) p.name = 'John' del p.name
Izlaz
Dobivanje imena Ime je: Adam Postavljanje imena na John Brisanje imena
Ovdje smo, umjesto za upotrebu property()
, koristili @property
dekorator.
Prvo, preciziramo da je name()
metoda također atribut Osobe. To se postiže korištenjem @property
metode prije dobivanja, kako je prikazano u programu.
Dalje, koristimo ime atributa da odredimo postavljač i brisač.
To se radi pomoću @name.setter
metode postavljanja i metode @name.deleter
brisanja.
Obavijest, koristili smo istu metodu name()
s različitim definicijama za definiranje getera, postavljača i brisača.
Sada, kad god koristimo p.name
, interno poziva odgovarajući getter, setter i deleter, kao što prikazuje ispisani izlaz prisutan unutar metode.