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.nameinternt 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 @propertyatt 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 @propertydekoratören.
Först anger vi att name()metoden också är ett attribut för Person. Detta görs genom att använda @propertyfö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.setterför settermetoden och @name.deleterfö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.namedet , kallas det internt lämplig getter, setter och radeter, vilket visas av den tryckta utmatningen som finns i metoden.








