Nuosavybės () konstrukcija grąžina ypatybę.
Sintaksė property()
yra:
ypatybė (fget = None, fset = None, fdel = None, doc = None)
Rekomenduojamas skaitymas: Python @property: Kaip jį naudoti ir kodėl?
ypatybė () Parametrai
Tam property()
reikalingi keturi neprivalomi parametrai:
- fget (neprivaloma) - funkcija gauti atributo vertę. Pagal numatytuosius nustatymus
None
. - fset (pasirinktinai) - funkcija nustatyti atributo vertę. Pagal numatytuosius nustatymus
None
. - fdel (pasirinktinai) - funkcija atributo vertei ištrinti. Pagal numatytuosius nustatymus
None
. - doc (pasirenkama) - eilutė, kurioje yra atributo dokumentai (docstring). Pagal numatytuosius nustatymus
None
.
Grąžinimo vertė iš turto ()
property()
grąžina nuosavybės atributą iš nurodyto getter, seter ir deleter.
- Jei nepateikta jokių argumentų,
property()
grąžinamas pagrindinės ypatybės atributas, kuriame nėra jokio „getter“, „seter“ ar „deleter“. - Jei dokumentas nepateikiamas,
property()
paimama „getter“ funkcijos instrukcija.
1 pavyzdys: sukurkite atributą naudodami „getter“, „setter“ ir „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
Rezultatas
Gaunamas vardas Vardas yra: Adomas Nustato vardą į John Ištrinamas vardas
Čia _name naudojamas kaip privatus kintamasis asmens vardui saugoti.
Mes taip pat nustatėme:
- geresnis metodas
get_name()
gauti asmens vardą, - seterio metodas
set_name()
nustatyti asmens vardą, - deleter metodas
del_name()
ištrinti asmens vardą.
Dabar iškvietę property()
metodą nustatėme naują nuosavybės atributo pavadinimą .
Kaip parodyta programoje, nuorodos į p.name
vidų iškviečiamos get_name()
kaip „getter“, „ set_name()
setter“ ir „ del_name()
deleter“ per spausdintą išvestį, esančią metodų viduje.
2 pavyzdys: @property dekoratoriaus naudojimas
Užuot naudoję property()
, galite naudoti „Python“ dekoratorių, @property
kad priskirtumėte „getter“, „seterį“ ir „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
Rezultatas
Gaunamas vardas Vardas yra: Adomas Nustato vardą į John Ištrinamas vardas
Čia, o ne naudojant property()
, mes panaudojome @property
dekoratorius.
Pirma, mes nurodome, kad name()
metodas taip pat yra asmens atributas. Tai daroma naudojant @property
„getter“ metodą, kaip parodyta programoje.
Tada mes naudojame atributo pavadinimą, norėdami nurodyti seterį ir deleterį.
Tai daroma naudojant @name.setter
seterio metodą ir @name.deleter
deleterio metodą.
Atkreipkite dėmesį, kad name()
apibrėžėme „getter“, „setter“ ir „deleter“ tą patį metodą su skirtingais apibrėžimais.
Dabar, kai mes naudojame p.name
, jis viduje skambina atitinkamu „getter“, „seter“ ir „deleter“, kaip parodo metodo viduje esanti spausdinta išvestis.