Den @property Decorator in Python verstehen
In Python können Sie mit dem @property Decorator Eigenschaften erstellen, die sich wie reguläre Instanzattribute verhalten. Im Gegensatz zu integrierten Eigenschaftsfunktionen, die Argumente entgegennehmen, empfängt der @property-Dekorator jedoch keine expliziten Argumente.
Wie es funktioniert
Um zu verstehen, wie die @property Damit der Decorator funktioniert, ist es wichtig, zunächst zu verstehen, dass die Funktion property() ein Deskriptorobjekt zurückgibt. Dies ist ein Vermittler, der zwischen einer Instanz und ihrer Eigenschaft sitzt und die Anwendung zusätzlicher Logik ermöglicht.
Das Deskriptorobjekt
Das von der Eigenschaft zurückgegebene Deskriptorobjekt( )-Funktion verfügt über drei integrierte Methoden:
Erstellen von Eigenschaften mit dem Decorator
Wenn der @property Decorator auf a angewendet wird Funktion gibt sie ein Deskriptorobjekt zurück und weist es dem Eigenschaftsnamen zu. Dieses Objekt behält die Getter-Funktion der ursprünglichen Funktion bei und enthält zwei zusätzliche Funktionen, die an die Setter- und Löschmethoden der Eigenschaft delegieren.
Zum Beispiel:
class C: def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x
Der obige Code erstellt eine Eigenschaft mit dem Namen „x“, die den Wert von self._x ohne explizites Eigenschaftsobjekt abrufen kann. Die Getter-Funktion wird automatisch vom Dekorateur erstellt.
Setter- und Deleter-Dekoratoren
Um Setter- und Löschmethoden hinzuzufügen, hängen Sie einfach .setter und .deleter an die @-Eigenschaft an Deskriptorobjekt, das Ihre beabsichtigten Funktionen übergibt:
@x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x
Mit diesen Methoden können Sie benutzerdefiniertes Verhalten für die Einstellung und implementieren Löschen des Eigenschaftswerts.
Implementierungsdetails
Die @decorator-Syntax für @property ist syntaktischer Zucker. Hinter den Kulissen wird der folgende Code ausgeführt:
def x(self): return self._x x = property(x)
Deskriptor-Beispiel
Hier ist ein Beispiel dafür, wie eine reine Python-Implementierung eines Eigenschaftsdeskriptors funktionieren würde:
class Property: def __init__(self, fget=None, fset=None, fdel=None, doc=None): self.fget = fget self.fset = fset self.fdel = fdel self.__doc__ = doc def __get__(self, obj, objtype=None): if obj is None: return self if self.fget is None: raise AttributeError("unreadable attribute") return self.fget(obj)
Mit dieser Klasse können Sie Eigenschaften mit Getter-, Setter- und Löschfunktionen manuell erstellen.
Das obige ist der detaillierte Inhalt vonWie funktioniert der @property Decorator von Python zum Erstellen von Eigenschaften?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!