Menu
Coddy logo textTech

Property-Dekorator

Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 10 von 64.

Der @property-Decorator ermöglicht es Ihnen, auf Methoden wie auf Attribute zuzugreifen, was eine saubere Möglichkeit bietet, Werte abzurufen und zu setzen.

Hier ist ein Beispiel für eine Klasse, die @property verwendet:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2

Erstellen Sie einen Kreis und greifen Sie auf Eigenschaften zu:

my_circle = Circle(5)

Greifen Sie auf Eigenschaften wie auf reguläre Attribute zu:

print(my_circle.radius)
print(my_circle.area)

Ausgabe:

5
78.53975

Beachten Sie, dass Sie beim Zugriff auf Eigenschaften keine Klammern () verwenden – sie sehen wie Attribute aus, führen aber Methodencode aus.

Fügen Sie einen Setter hinzu, um das Ändern von Werten zu ermöglichen:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @radius.setter
    def radius(self, value):
        if value > 0:
            self._radius = value
        else:
            print("Radius must be positive!")

Jetzt können Sie den Radius wie ein Attribut setzen:

my_circle = Circle(5)
my_circle.radius = 10  # Verwendet den Setter
print(my_circle.radius)  # Verwendet den Getter

Ausgabe:

10

Wichtiger Punkt: @property lässt Methoden wie Attribute aussehen, während @property_name.setter es Ihnen ermöglicht zu steuern, wie Werte zugewiesen werden.

Spickzettel

Der @property-Decorator ermöglicht es Ihnen, auf Methoden wie auf Attribute zuzugreifen, was eine saubere Möglichkeit bietet, Werte abzurufen und zu setzen.

Grundlegende Verwendung von Properties:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2

Zugriff auf Properties ohne Klammern:

my_circle = Circle(5)
print(my_circle.radius)  # 5
print(my_circle.area)    # 78.53975

Hinzufügen eines Setters zur Steuerung der Wertzuweisung:

@radius.setter
def radius(self, value):
    if value > 0:
        self._radius = value
    else:
        print("Radius must be positive!")

Werte wie Attribute setzen:

my_circle.radius = 10  # Verwendet den Setter
print(my_circle.radius)  # Verwendet den Getter

Probier es selbst

Diese Lektion enthält keine Programmieraufgabe.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Object Oriented Programming