Ejendommen () -konstruktionen returnerer egenskabsattributten.
Syntaksen for property()
er:
egenskab (fget = Ingen, fset = Ingen, fdel = Ingen, doc = Ingen)
Anbefalet læsning: Python @property: Sådan bruges det og hvorfor?
egenskab () Parametre
Det property()
tager fire valgfri parametre:
- fget (valgfrit) - Funktion til at få attributværdien. Som standard er
None
. - fset (valgfrit) - Funktion til indstilling af attributværdien. Som standard er
None
. - fdel (valgfri) - Funktion til sletning af attributværdien. Som standard er
None
. - doc (valgfri) - En streng, der indeholder dokumentationen (docstring) for attributten. Som standard er
None
.
Returneringsværdi fra ejendom ()
property()
returnerer egenskabsattributten fra den givne getter, setter og deleter.
- Hvis der ikke gives argumenter,
property()
returnerer en baseegenskabsattribut, der ikke indeholder nogen getter, setter eller deleter. - Hvis doc ikke leveres,
property()
tager doktringen af getter-funktionen.
Eksempel 1: Opret attribut med getter, setter og 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
Produktion
Få navn Navnet er: Adam Indstiller navn til John Slet navn
Her bruges _name som den private variabel til lagring af personens navn.
Vi indstiller også:
- en getter-metode
get_name()
til at få navnet på personen, - en setter metode
set_name()
til at indstille navnet på personen, - en
del_name()
sletningsmetode til at slette personens navn.
Nu indstiller vi et nyt egenskabsattributnavn ved at kalde property()
metoden.
Som vist i programmet henviser p.name
internt til kald get_name()
som getter, set_name()
som setter og del_name()
som deleter gennem det trykte output til stede inde i metoderne.
Eksempel 2: Brug af @property decorator
I stedet for at bruge property()
kan du bruge Python-dekoratøren @property
til at tildele getter, setter og 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
Produktion
Få navn Navnet er: Adam Indstiller navn til John Slet navn
Her, i stedet for at bruge property()
, har vi brugt @property
dekoratøren.
For det første specificerer vi, at name()
metoden også er en attribut for Person. Dette gøres ved hjælp af @property
før getter-metoden som vist i programmet.
Dernæst bruger vi attributnavnet til at specificere setter og sletning.
Dette gøres ved at bruge @name.setter
til setter-metoden og @name.deleter
til den deleter-metode.
Bemærk, at vi har brugt den samme metode name()
med forskellige definitioner til at definere getter, setter og deleter.
Nu, når vi bruger p.name
det, kalder det internt den relevante getter, setter og deleter som vist med det trykte output, der findes i metoden.