Egenskapen () -konstruktionen returnerar egenskapsattributet.
Syntaksen för property()
är:
egenskap (fget = Ingen, fset = Ingen, fdel = Ingen, doc = Ingen)
Rekommenderad läsning: Python @property: Hur man använder det och varför?
property () Parametrar
Det property()
tar fyra valfria parametrar:
- fget (valfritt) - Funktion för att få attributvärdet. Standardvärden är
None
. - fset (valfritt) - Funktion för att ställa in attributvärdet. Standardvärden är
None
. - fdel (valfritt) - Funktion för att radera attributvärdet. Standardvärden är
None
. - doc (valfritt) - En sträng som innehåller dokumentationen (docstring) för attributet. Standardvärden är
None
.
Returvärde från fastighet ()
property()
returnerar egenskapsattributet från den givna getter, setter och radeter.
- Om inga argument ges
property()
returnerar ett attribut för basegenskap som inte innehåller någon getter, setter eller radeter. - Om doc inte tillhandahålls,
property()
tar doktringen av getter-funktionen.
Exempel 1: Skapa attribut med getter, setter och radeter
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å namn Namnet är: Adam Ställer in namn till John Tar bort namn
Här används _name som den privata variabeln för lagring av personens namn.
Vi ställer också in:
- en gettermetod för
get_name()
att få namnet på personen, - en settermetod för
set_name()
att ställa in namnet på personen, - en raderingsmetod för
del_name()
att radera namnet på personen.
Nu ställer vi in ett nytt egenskapsattributnamn genom att anropa property()
metoden.
Som visas i programmet, refererar p.name
internt samtal get_name()
som getter, set_name()
som setter och del_name()
som radeter genom den tryckta utdata som finns i metoderna.
Exempel 2: Använda @property decorator
Istället för att använda property()
kan du använda Python-dekoratören för @property
att tilldela getter, setter och radeter.
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å namn Namnet är: Adam Ställer in namn till John Tar bort namn
Här, istället för att använda property()
, har vi använt @property
dekoratören.
Först anger vi att name()
metoden också är ett attribut för Person. Detta görs genom att använda @property
före gettermetoden som visas i programmet.
Därefter använder vi attributnamnet för att specificera setter och radeter.
Detta görs genom att använda @name.setter
för settermetoden och @name.deleter
för raderingsmetoden.
Observera att vi har använt samma metod name()
med olika definitioner för att definiera getter, setter och radeter.
Nu, när vi använder p.name
det , kallas det internt lämplig getter, setter och radeter, vilket visas av den tryckta utmatningen som finns i metoden.