Property-Dekoratoren
Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 14 von 64.
Property-Dekoratoren ermöglichen es Ihnen zu steuern, wie auf Attribute zugegriffen wird und wie diese geändert werden, während die einfache Attributsyntax beibehalten wird.
Hier ist ein Beispiel für eine Klasse mit einem Property-Getter:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._ageVerwenden Sie die Eigenschaft wie ein reguläres Attribut:
person = Person("Alice", 30)
print(person.age)Ausgabe:
30Beachten Sie, dass Sie auf age ohne Klammern zugreifen, obwohl eigentlich eine Methode aufgerufen wird.
Fügen Sie einen Setter hinzu, um Daten beim Setzen von Werten zu validieren:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative")
self._age = valueJetzt können Sie das Alter mit automatischer Validierung festlegen:
person = Person("Alice", 30)
person.age = 31 # Verwendet den Setter mit Validierung
print(person.age) # Verwendet den Getter
# Dies würde einen Fehler auslösen:
# person.age = -5 # ValueError: Das Alter kann nicht negativ seinAusgabe:
31Erstellen Sie berechnete Eigenschaften, die Werte berechnen:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
return self.width * self.height
rect = Rectangle(5, 3)
print(rect.area) # Berechnet 5 * 3 = 15Ausgabe:
15Wichtiger Punkt: Property-Dekoratoren lassen Methoden wie Attribute aussehen. Verwenden Sie @property für Getter und @attribute_name.setter für Setter. Dies ermöglicht Datenvalidierung und berechnete Werte, während die einfache Syntax für den Attributzugriff beibehalten wird.
Aufgabe
MittelVervollständigen Sie die Temperature-Klasse in temperature.py, die zwischen Celsius und Fahrenheit umrechnet. Verwenden Sie diese Klasse anschließend in driver.py, um die Temperaturumrechnungen zu testen. Folgen Sie den TODO-Kommentaren in beiden Dateien für schrittweise Anleitungen.
Spickzettel
Property-Dekoratoren ermöglichen es Ihnen zu steuern, wie auf Attribute zugegriffen wird und wie diese geändert werden, während die einfache Attributsyntax beibehalten wird.
Verwenden Sie @property für Getter-Methoden:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
person = Person("Alice", 30)
print(person.age) # Zugriff wie auf ein Attribut, keine KlammernVerwenden Sie @attribute_name.setter für Setter-Methoden mit Validierung:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative")
self._age = value
person = Person("Alice", 30)
person.age = 31 # Verwendet Setter mit ValidierungErstellen Sie berechnete Eigenschaften, die Werte kalkulieren:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
return self.width * self.height
rect = Rectangle(5, 3)
print(rect.area) # Berechnet 5 * 3 = 15Probier es selbst
# TODO: Importiere die Klasse Temperature aus dem Modul temperature
# Teste die Klasse:
# TODO: Erstelle eine Temperatur-Instanz bei 25°C
temp = None # Durch tatsächliche Temperature-Instanz ersetzen
# TODO: Gib sowohl Celsius- als auch Fahrenheit-Werte aus
# TODO: Verwende das Format: "25.0°C ist 77.0°F"
# TODO: Setze die Temperatur auf 98.6°F
# TODO: Gib beide Werte erneut aus, um zu bestätigen, dass die Umrechnung funktioniert
# TODO: Verwende dasselbe Format wie zuvorDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Object Oriented Programming
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktor-Methode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDie super()-FunktionMethoden überschreibenMehrfachvererbungMethod Resolution OrderZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden
Einführung in Magic MethodsOperator-ÜberladungMagic Methods für ContainerRückblick - Eigene Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung2Dekoratoren
Einführung in DekoratorenProperty-DekoratorStatischer Methoden-DekoratorKlassenmethoden-Dekorator5Polymorphismus
Methoden-Überschreiben vertieftDuck TypingAbstrakte Klassen und MethodenInterface-DesignZusammenfassung – Formen-Rechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische und KlassenmethodenKlassendekoratorenContext Manager3Klasseneigenschaften
Instanz- vs. KlassenvariablenProperty-DekoratorenPrivate AttributeZusammenfassung – Bankkonto-Manager6Kapselung
Public, Protected, Private MemberZugriffsmodifikatorenInformation HidingProperty-Decorators für FortgeschritteneZusammenfassung - Studentenverwaltungssystem12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen