Konstrukt atribuut () tagastab atribuudi atribuut.
Süntaks property()
on:
atribuut (fget = Puudub, fset = Puudub, fdel = Puudub, doc = Puudub)
Soovitatav lugemine: Python @property: Kuidas seda kasutada ja miks?
omadus () Parameetrid
Selleks property()
on vaja neli valikulist parameetrit:
- fget (valikuline) - funktsioon atribuudi väärtuse saamiseks. Vaikimisi
None
. - fset (valikuline) - funktsioon atribuudi väärtuse määramiseks. Vaikimisi
None
. - fdel (valikuline) - funktsioon atribuudi väärtuse kustutamiseks. Vaikimisi
None
. - doc (valikuline) - string, mis sisaldab atribuudi dokumentatsiooni (docstring). Vaikimisi
None
.
Tagastusväärtus kinnisvaralt ()
property()
tagastab atribuudi atribuudi antud getter, setter ja deleter.
- Kui argumente pole antud,
property()
tagastab atribuudi base atribuut, mis ei sisalda ühtegi getterit, setterit ega deleterit. - Kui dokumenti pole esitatud,
property()
võtab see funktsiooni getter käsu.
Näide 1: looge atribuut getteri, setteri ja deleteriga
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
Väljund
Nime hankimine Nimi on: Adam Määrab nimeks John Kustutab nime
Siin kasutatakse nime _name isikliku muutujana isiku nime salvestamiseks.
Samuti määrasime:
- getter-meetod
get_name()
isiku nime saamiseks, - setter-meetod
set_name()
isiku nime määramiseks, - deleter meetod
del_name()
isiku nime kustutamiseks.
Nüüd määrasime property()
meetodile helistades uue atribuudi atribuudi nime .
Nagu programmis näidatud, p.name
kutsub sisemiselt viitamine meetodite sees oleva trükiväljundi kaudu välja get_name()
nagu getter, set_name()
setter ja del_name()
deleter.
Näide 2: @omandi dekoraatori kasutamine
property()
Kasutamise asemel saate Pythoni dekoraatori @property
abil määrata tähise, setteri ja deleteri.
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
Väljund
Nime hankimine Nimi on: Adam Määrab nimeks John Kustutab nime
Siin property()
oleme selle asemel kasutanud @property
dekoraatorit.
Esiteks täpsustame, et name()
meetod on ka isiku atribuut. Selleks kasutatakse @property
enne getter-meetodit, nagu programmis näidatud.
Järgmisena kasutame setteri ja deleteri täpsustamiseks atribuudi nime.
Selleks kasutatakse @name.setter
setteri meetodit ja @name.deleter
deleter meetodit.
Pange tähele, et me kasutasime name()
getteri, setteri ja deleteri määratlemiseks sama meetodit koos erinevate definitsioonidega.
Nüüd, kui me seda kasutame p.name
, kutsub see sisemiselt sobivat getteri, setterit ja deleterit, nagu näitab meetodi sees olev trükitud väljund.