Python-egenskap ()

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.

Intressanta artiklar...