Eiendommen () -konstruksjonen returnerer eiendomsattributtet.
Syntaksen for property()
er:
eiendom (fget = Ingen, fset = Ingen, fdel = Ingen, doc = Ingen)
Anbefalt lesing: Python @property: Hvordan bruke den og hvorfor?
eiendom () Parametere
Det property()
tar fire valgfrie parametere:
- fget (valgfritt) - Funksjon for å få attributtverdien. Standardinnstillingen er
None
. - fset (valgfritt) - Funksjon for å stille inn attributtverdien. Standardinnstillingen er
None
. - fdel (valgfritt) - Funksjon for å slette attributtverdien. Standardinnstillingen er
None
. - doc (valgfritt) - En streng som inneholder dokumentasjonen (docstring) for attributtet. Standardinnstillingen er
None
.
Returverdi fra eiendom ()
property()
returnerer eiendomsattributtet fra den gitte getter, setter og deleter.
- Hvis ingen argumenter blir gitt,
property()
returnerer en baseegenskapsattributt som ikke inneholder noen getter, setter eller deleter. - Hvis doc ikke leveres,
property()
tar du doktringen av getter-funksjonen.
Eksempel 1: Lag attributt 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
Produksjon
Få navn Navnet er: Adam Setter navn til John Sletter navn
Her brukes _name som den private variabelen for å lagre navnet på personen.
Vi setter også:
- en getter-metode for
get_name()
å få navnet på personen, - en settermetode for
set_name()
å angi navnet på personen, - en slettemetode for
del_name()
å slette navnet på personen.
Nå setter vi et nytt eiendomsattributtnavn ved å kalle property()
metoden.
Som vist i programmet, refererer p.name
internt til kall get_name()
som getter, set_name()
som setter og del_name()
som deleter gjennom utskriften som er tilstede i metodene.
Eksempel 2: Bruk av @property decorator
I stedet for å bruke property()
kan du bruke Python-dekoratøren @property
til å 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
Produksjon
Få navn Navnet er: Adam Setter navn til John Sletter navn
Her, i stedet for å bruke property()
, har vi brukt @property
dekoratøren.
Først spesifiserer vi at name()
metoden også er et personattributt. Dette gjøres ved å bruke @property
før getter-metoden som vist i programmet.
Deretter bruker vi attributtnavnet til å spesifisere setter og sletter.
Dette gjøres ved å bruke @name.setter
for setter-metoden og @name.deleter
for deleter-metoden.
Legg merke til at vi har brukt den samme metoden name()
med forskjellige definisjoner for å definere getter, setter og deleter.
Nå, når vi bruker p.name
det, kaller det internt den aktuelle getter, setter og deleter som vist av den trykte utgaven som er inne i metoden.