Konstrukt property () vrne atribut lastnosti.
Sintaksa property()
je:
lastnost (fget = Brez, fset = Brez, fdel = Brez, doc = Brez)
Priporočeno branje: Python @property: Kako ga uporabljati in zakaj?
parametri lastnosti ()
property()
Traja štiri izbirne parametre:
- fget (neobvezno) - funkcija za pridobivanje vrednosti atributa. Privzete vrednosti
None
. - fset (neobvezno) - funkcija za nastavitev vrednosti atributa. Privzete vrednosti
None
. - fdel (neobvezno) - Funkcija za brisanje vrednosti atributa. Privzete vrednosti
None
. - doc (neobvezno) - niz, ki vsebuje dokumentacijo (niz dokumentov) za atribut. Privzete vrednosti
None
.
Vrnjena vrednost iz lastnosti ()
property()
vrne atribut lastnosti danega geterja, nastavitelja in brisalca.
- Če niso podani nobeni argumenti,
property()
vrne atribut osnovne lastnosti, ki ne vsebuje nobenega getterja, nastavitelja ali brisalca. - Če dokument ni na voljo,
property()
vzame niz dokumentov funkcije getter.
Primer 1: Ustvari atribut z getter, setter in deleter
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
Izhod
Pridobivanje imena Ime je: Adam Nastavitev imena na John Brisanje imena
Tu se _name uporablja kot zasebna spremenljivka za shranjevanje imena osebe.
Določili smo tudi:
- metoda pridobivanja,
get_name()
da dobite ime osebe, - nastavitvena metoda
set_name()
za določitev imena osebe, - način
del_name()
brisanja za brisanje imena osebe.
Zdaj nastavimo novo ime atributa lastnosti s klicanjem property()
metode.
Kot je prikazano v programu, sklicevanje na p.name
notranje klice get_name()
kot getter, set_name()
setter in del_name()
deleter prek natisnjenega izhoda, ki je prisoten znotraj metod.
2. primer: Uporaba @property decorator
Namesto uporabe property()
lahko z dekoraterjem Python @property
dodelite getter, setter in deleter.
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
Izhod
Pridobivanje imena Ime je: Adam Nastavitev imena na John Brisanje imena
Tu smo namesto uporabe property()
uporabili @property
dekorater.
Najprej določimo, da je name()
metoda tudi atribut osebe. To se naredi z uporabo @property
metode getter, kot je prikazano v programu.
Nato z imenom atributa določimo nastavitelja in izbrisalec.
To se naredi z uporabo @name.setter
metode nastavitve in @name.deleter
metode brisanja.
Opazimo, da smo uporabili isto metodo name()
z različnimi definicijami za določanje getterja, setterja in brisalca.
Zdaj, kadar koli uporabimo p.name
, interno pokliče ustrezni getter, setter in deleter, kot prikazuje natisnjeni izhod, ki je prisoten znotraj metode.