Das Konstrukt property () gibt das Eigenschaftsattribut zurück.
Die Syntax von property()
lautet:
Eigenschaft (fget = Keine, fset = Keine, fdel = Keine, doc = Keine)
Empfohlene Lektüre: Python @property: Wie wird es verwendet und warum?
property () Parameter
Es werden property()
vier optionale Parameter benötigt:
- fget (optional) - Funktion zum Abrufen des Attributwerts. Der Standardwert ist
None
. - fset (optional) - Funktion zum Einstellen des Attributwerts. Der Standardwert ist
None
. - fdel (optional) - Funktion zum Löschen des Attributwerts. Der Standardwert ist
None
. - doc (optional) - Eine Zeichenfolge, die die Dokumentation (docstring) für das Attribut enthält. Der Standardwert ist
None
.
Rückgabewert von property ()
property()
Gibt das Eigenschaftsattribut vom angegebenen Getter, Setter und Deleter zurück.
- Wenn keine Argumente angegeben werden, wird
property()
ein Basiseigenschaftsattribut zurückgegeben, das keinen Getter, Setter oder Deleter enthält. - Wenn doc nicht bereitgestellt wird,
property()
wird die Dokumentzeichenfolge der Getter-Funktion verwendet.
Beispiel 1: Erstellen Sie ein Attribut mit Getter, Setter und 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
Ausgabe
Name abrufen Der Name lautet: Adam Name auf John setzen Name löschen
Hier wird _name als private Variable zum Speichern des Namens der Person verwendet.
Wir setzen auch:
- eine Getter-Methode
get_name()
, um den Namen der Person zu erhalten, - eine Setter-Methode
set_name()
zum Festlegen des Namens der Person, - Eine Löschmethode
del_name()
zum Löschen des Namens der Person.
Jetzt legen wir einen neuen Eigenschaftsattributnamen fest, indem wir die property()
Methode aufrufen .
Wie im Programm gezeigt, werden p.name
interne Aufrufe get_name()
als Getter, set_name()
Setter und del_name()
Deleter durch die in den Methoden vorhandene Druckausgabe aufgerufen.
Beispiel 2: Verwenden von @property decorator
Anstatt zu verwenden property()
, können Sie den Python-Dekorator verwenden @property
, um den Getter, Setter und Deleter zuzuweisen.
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
Ausgabe
Name abrufen Der Name lautet: Adam Name auf John setzen Name löschen
Anstatt zu verwenden property()
, haben wir hier den @property
Dekorateur verwendet.
Zunächst geben wir an, dass die name()
Methode auch ein Attribut von Person ist. Dies erfolgt @property
vor der Getter-Methode, wie im Programm gezeigt.
Als nächstes verwenden wir den Attributnamen, um den Setter und den Deleter anzugeben.
Dies erfolgt mit @name.setter
der Setter-Methode und @name.deleter
der Deleter-Methode.
Beachten Sie, dass wir dieselbe Methode name()
mit unterschiedlichen Definitionen zum Definieren von Getter, Setter und Deleter verwendet haben.
Wenn wir jetzt verwenden p.name
, ruft es intern den entsprechenden Getter, Setter und Deleter auf, wie aus der gedruckten Ausgabe in der Methode hervorgeht.