Property Decorator in Python

Manav Narula 21 Juni 2023
  1. Eigenschaften in Python
  2. Verwendung von den Decorator @property in Python
Property Decorator in Python

Wir können unsere Klassen erstellen und verschiedene Datenelemente und Funktionen in Python definieren. Alles ist ein Objekt, und wir können Objekte unserer eigenen definierten Klasse instanziieren.

In diesem Tutorial wird die Verwendung des Python-Eigenschaften-Decorators (@property) demonstriert.

Eigenschaften in Python

Manchmal verwenden wir die Getter- und Setter-Funktionen von Python, um ein nicht öffentliches Klassenattribut zurückzugeben.

Wir erstellen innerhalb der Klasse eine Funktion, die dieses Attribut zurückgibt, die getter-Funktion.

Die Funktion, die den Wert für ein solches Attribut setzen kann, wird als setter-Funktion bezeichnet.

Beispiel:

class A:
    def __init__(self, a):
        self._a = a

    def getter_a(self):
        return self._a

    def setter_a(self, val):
        self._a = val


n = A(5)
print(n.getter_a())
n.setter_a(10)
print(n.getter_a())

Ausgabe:

5
10

Im obigen Beispiel haben wir die Getter- und Setter-Funktionen erstellt, die den Attributwert von a zurückgeben und ändern.

Diese Methode wird nicht als die pythonische Art betrachtet, mit Attributen umzugehen. Wir können die Notwendigkeit beseitigen, die Klasse mit Getter- und Setter-Methoden zu clustern.

Der Python-Ansatz beinhaltet die Verwendung von Eigenschaften, die Funktionalitäten für ein bestimmtes Klassenattribut einrichten können.

Mit der Funktion property() erzeugen wir Objekte der Klasse property. Wir hängen die Getter-, Setter- und Deleter-Methoden als Eigenschaften für ein Datenelement an.

Dazu verwenden wir die Argumente fget, fset, fdel und doc innerhalb der Eigenschaftsfunktion.

Die mit fget verknüpfte Funktion gibt den Wert des Attributs zurück. Ebenso ändert die Methode fset den Wert des Attributs, und die Funktion fdel löscht den Wert.

Die Methode doc liefert die Dokumentation für ein gegebenes Attribut.

Wir werden diese im folgenden Code verwenden.

class A:
    def __init__(self, a):
        self._a = a

    def get_a(self):
        return self._a

    def set_a(self, val):
        self._a = val

    def del_a(self):
        del self._a
        print("Deleted")

    a = property(fget=get_a, fset=set_a, fdel=del_a, doc="Documenttion for a")


n = A(5)
print(n.a)
n.a = 10
print(n.a)
del n.a
print(n.a)

Ausgabe:

5
10
Deleted
Traceback (most recent call last):
  File "<string>", line 21, in <module>
File "<string>", line 6, in get_a
AttributeError: 'A' object has no attribute '_a'

Im obigen Beispiel haben wir die Eigenschaft a für die Klasse erstellt und die erforderlichen Eigenschaften hinzugefügt. Wie Sie sehen können, erhalten wir nach Verwendung der Eigenschaft deleted den AttributeError, der anzeigt, dass das Attribut entfernt wurde.

Verwendung von den Decorator @property in Python

Decorators werden in Python verwendet, um einer Funktion zusätzliche Funktionalität hinzuzufügen. Eine Funktion wird als Argument genommen und eine andere Funktion zurückgegeben.

Nach der Einführung von Dekoratoren in Python wurde die Verwendung der Funktion property() zum Festlegen der Eigenschaften abgeschwächt, und die Dekorator-Syntax dafür wurde bevorzugt.

Die Decorators wurden in Python v2.4 eingeführt. Der Decorator @property wurde beliebt, um Eigenschaften zu erstellen.

Wir werden den Decorator @property im vorherigen Beispiel unten verwenden.

class A:
    def __init__(self, a):
        self._a = a

    @property
    def a(self):
        return self._a

    @a.setter
    def a(self, val):
        self._a = val

    @a.deleter
    def a(self):
        del self._a
        print("Deleted")


n = A(5)
print(n.a)
n.a = 10
print(n.a)
del n.a
print(n.a)

Ausgabe:

5
10
Deleted
Traceback (most recent call last):
  File "<string>", line 23, in <module>
File "<string>", line 7, in a
AttributeError: 'A' object has no attribute '_a'

Wie Sie sehen können, haben wir die gleiche Ausgabe wie im vorherigen Beispiel erhalten. Diese Methode ist relativ einfach zu verwenden als die Funktion property().

Beim Decorator @property verwenden wir die Funktion, die das Attribut als Property-Name zurückgibt. Danach fügen @<property-name>.setter und @<property-name>.deleter die Setter- und Deleter-Methoden hinzu.

Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Verwandter Artikel - Python Property