Wie funktioniert der @property Decorator in Python?

In Python dient der @property-Dekorator dazu, eine Methode als "Getter" für eine Klasseneigenschaft zu definieren. Die Methode wird aufgerufen, als ob es sich um ein Attribut handeln würde, anstatt als Methode (mit Klammern). Zum Beispiel:

class MyClass:
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I am the 'x' property."""
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

In diesem Beispiel ist die Methode "x" mit @property dekoriert, sodass sie als Getter für die Eigenschaft "x" fungiert. Um eine "Setter"-Methode für die Eigenschaft zu definieren, wird der @x.setter-Dekorator verwendet, um anzugeben, dass die folgende Methode der Setter für die Eigenschaft "x" ist. Auf diese Weise kann man die Notation für Attribute sowohl zum Lesen als auch zum Schreiben des Werts verwenden.

class MyClass:
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I am the 'x' property."""
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

a = MyClass()
a.x = 10 
print(a.x)

Man kann den @property-Dekorator auch zusammen mit dem @x.deleter-Dekorator verwenden, um eine __del__-Methode für die Eigenschaft zu definieren.