„Python“ nuosavybė ()

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.namevidų 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ų, @propertykad 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 @propertydekoratorius.

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.setterseterio metodą ir @name.deleterdeleterio 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.

Įdomios straipsniai...