Ominaisuus () -rakenne palauttaa ominaisuusattribuutin.
Syntaksi property()
on:
ominaisuus (fget = Ei mitään, fset = Ei mitään, fdel = Ei mitään, doc = Ei mitään)
Suositeltavaa lukea : Python @property: Kuinka sitä käytetään ja miksi?
ominaisuus () Parametrit
property()
Kestää neljä valinnaiset parametrit:
- fget (valinnainen) - Toiminto määritteen arvon saamiseksi. Oletusarvo on
None
. - fset (valinnainen) - Toiminto määritteen arvon asettamiseen. Oletusarvo on
None
. - fdel (valinnainen) - Toiminto määritteen arvon poistamiseksi. Oletusarvo on
None
. - doc (valinnainen) - merkkijono, joka sisältää määritteen dokumentaation (docstring). Oletusarvo on
None
.
Palautusarvo kiinteistöstä ()
property()
palauttaa ominaisuusattribuutin annetusta getteristä, setteristä ja deleteristä.
- Jos argumentteja ei anneta,
property()
palauttaa perusominaisuusmääritteen, joka ei sisällä mitään getteriä, setteriä tai deleteria. - Jos asiakirjaa ei toimiteta,
property()
vie getter-funktion komentosarjan.
Esimerkki 1: Luo attribuutti getterillä, setterillä ja deleterillä
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
Tuotos
Nimen hankkiminen Nimi on: Adam Asettamalla nimen John Poistetaan nimi
Täällä _nimeä käytetään yksityisenä muuttujana henkilön nimen tallentamiseen.
Asetimme myös:
- getter-menetelmä
get_name()
henkilön nimen saamiseksi, - setterimenetelmä
set_name()
henkilön nimen asettamiseksi, - deleter-menetelmä
del_name()
henkilön nimen poistamiseksi.
Nyt asetetaan uusi ominaisuusmääritteen nimi kutsumalla property()
menetelmä.
Kuten ohjelmassa on esitetty, p.name
sisäisesti viittaaminen kutsuu get_name()
getteriksi, set_name()
setteriksi ja del_name()
deleteriksi menetelmien sisällä olevan painetun tuloksen kautta.
Esimerkki 2: Käyttämällä @ominaisuuskoristetta
Käyttämisen sijaan property()
voit käyttää Python-sisustajaa @property
määrittämään getterin, setterin ja deleterin.
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
Tuotos
Nimen hankkiminen Nimi on: Adam Asettamalla nimen John Poistetaan nimi
Tässä property()
olemme käyttäneet @property
koristelijaa sen sijaan , että käyttäisimme .
Ensinnäkin määritämme, että name()
menetelmä on myös Person-attribuutti. Tämä tehdään @property
ennen getter-menetelmää, kuten ohjelmassa on esitetty.
Seuraavaksi käytämme määritteen nimeä määrittelijän ja poistajan määrittämiseksi.
Tämä tehdään käyttämällä @name.setter
setterimenetelmää ja @name.deleter
deleter-menetelmää.
Huomaa, että olemme käyttäneet samaa menetelmää name()
eri määritelmillä määritettäessä getter, setter ja deleter.
Nyt, kun käytämme p.name
, se kutsuu sisäisesti sopivan getterin, setterin ja deleterin, kuten menetelmän sisällä oleva painettu tulos osoittaa.