0Pricing
Python Academy · Lektion

Der @property-Decorator

Verwenden Sie property für Getter, Setter und Deleter.

Der @property-Decorator ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Einführung

@property macht aus einer Methode ein lesbares Attribut. @setter und @deleter vervollständigen das Muster für kontrollierten Zugriff.

Warum @property?

Anstelle von getX()/setX() nach Java-Art verwendet Python @property. Der Zugriff sieht wie auf ein Attribut aus: obj.value statt obj.get_value().
class Circle:
    def __init__(self, r): self._r = r
    @property
    def radius(self): return self._r
c = Circle(5)
print(c.radius)  # no ()

Berechnete Eigenschaften

@property-Methoden berechnen Werte bei Bedarf. obj.area wird bei jedem Zugriff berechnet – ein gespeicherter Wert ist nicht erforderlich.
import math
class Circle:
    def __init__(self, r): self._r = r
    @property
    def area(self): return math.pi * self._r**2
c = Circle(5)
print(round(c.area, 2))

Property-Setter

@property_name.setter fügt einen Setter hinzu. Nun ruft c.radius = 10 die Setter-Methode auf.
class Circle:
    def __init__(self, r): self._r = r
    @property
    def radius(self): return self._r
    @radius.setter
    def radius(self, val):
        if val <= 0: raise ValueError('radius must be positive')
        self._r = val
c = Circle(5)
c.radius = 10
print(c.radius)

Property-Deleter

@property_name.deleter verarbeitet del obj.attr. Verwenden Sie ihn für Bereinigungslogik.
class User:
    def __init__(self, name): self._name = name
    @property
    def name(self): return self._name
    @name.deleter
    def name(self): del self._name
u = User('Alice')
del u.name
print(hasattr(u, '_name'))

Schreibgeschützte Property

Definieren Sie nur den Getter (keinen Setter). Ein Zuweisungsversuch löst AttributeError aus.
class Const:
    def __init__(self, v): self._v = v
    @property
    def value(self): return self._v
c = Const(42)
print(c.value)
try: c.value = 99
except AttributeError as e: print(e)

Property mit Validierung

Setter eignen sich hervorragend zur Datenvalidierung – prüfen Sie Typ, Wertebereich oder Format, bevor Sie die Daten speichern.
class BoundedInt:
    def __init__(self, lo, hi): self.lo,self.hi=lo,hi; self._v=lo
    @property
    def value(self): return self._v
    @value.setter
    def value(self, v):
        if not self.lo <= v <= self.hi:
            raise ValueError(f'{v} out of [{self.lo},{self.hi}]')
        self._v = v
b = BoundedInt(0, 10)
b.value = 5
print(b.value)

Caching mit property

Kombinieren Sie @property mit einem zwischengespeicherten Wert, um die Berechnung einmal auszuführen und das Ergebnis per Memoization zu speichern.
class Expensive:
    _cache = None
    @property
    def result(self):
        if self._cache is None:
            self._cache = sum(range(1000))
        return self._cache
e = Expensive()
print(e.result)
print(e.result)

cached_property (Python 3.8+)

@functools.cached_property berechnet die Property einmal und speichert sie als Instanzattribut – wiederholte Berechnungen sind nicht erforderlich.
from functools import cached_property
import math
class Circle:
    def __init__(self, r): self.r = r
    @cached_property
    def area(self): return math.pi * self.r**2
c = Circle(5)
print(round(c.area, 2))

Property vs. __slots__

__slots__ verhindert die Erstellung beliebiger Attribute und spart Speicher. Properties fügen Logik hinzu. Beide ergänzen sich.
class Point:
    __slots__ = ('_x', '_y')
    def __init__(self, x, y): self._x,self._y=x,y
    @property
    def x(self): return self._x
p = Point(1, 2)
print(p.x)

Wann Sie @property verwenden sollten

Verwenden Sie @property, wenn Sie Validierung oder berechnete Werte benötigen oder die Abwärtskompatibilität beim Ändern interner Implementierungsdetails bewahren möchten.
# Before: class Person:
#     def __init__(self, age): self.age = age
# After: add validation without changing caller code
class Person:
    def __init__(self, age): self.age = age
    @property
    def age(self): return self._age
    @age.setter
    def age(self, v):
        if v < 0: raise ValueError('negative age')
        self._age = v
p = Person(30)
print(p.age)

Kurzer Test

Was geschieht, wenn Sie einer schreibgeschützten @property (ohne definierten Setter) einen Wert zuweisen?

Zusammenfassung

@property: Der Getter wird zum Attributzugriff. @name.setter fügt Schreibzugriff hinzu. @name.deleter fügt Unterstützung für del hinzu. @cached_property berechnet einmal. Setter dienen der Validierung.

Weiter so

Hervorragender Fortschritt! Fahren Sie fort, um das nächste Konzept zu meistern.

Häufig gestellte Fragen

Ist die Lektion „Der @property-Decorator“ kostenlos?

Ja — der vollständige Text von „Der @property-Decorator“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Der @property-Decorator“?

Verwenden Sie property für Getter, Setter und Deleter. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Der @property-Decorator“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Funktionen als Objekte erster Klasse
  2. Benutzerdefinierte Decorators schreiben
  3. Der @property-Decorator
  4. @classmethod und @staticmethod
← Zurück zu Python Academy