Property-Decorators
Teil des Abschnitts Objektorientierte Programmierung der Python-Journey von Coddy. Lektion 14 von 64.
Eigenschaftsdekoratoren ermöglichen dir, zu steuern, wie auf Attribute zugegriffen wird und wie sie geändert werden, während die einfache Attributsyntax erhalten bleibt.
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._ageVerwende die Eigenschaft wie ein normales Attribut:
person = Person("Alice", 30)
print(person.age)Ausgabe:
30Beachte, dass du auf age ohne Klammern zugreifst, obwohl tatsächlich eine Methode aufgerufen wird.
Füge 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 kannst du 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 darf nicht negativ seinAusgabe:
31Erstelle 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: Eigenschaftsdekodatoren lassen Methoden wie Attribute aussehen. Verwende @property für Getter und @attribute_name.setter für Setter. So kannst du Daten validieren und berechnete Werte verwenden und dabei die einfache Syntax für den Attributzugriff beibehalten.
Aufgabe
MittelVervollständige die Klasse Temperature in temperature.py, die zwischen Celsius und Fahrenheit umrechnet. Verwende diese Klasse anschließend in driver.py, um Temperaturumrechnungen zu testen. Folge den TODO-Kommentaren in beiden Dateien und arbeite die Schritte der Reihe nach ab.
Gib jede Umrechnung im Format [celsius]°C is [fahrenheit]°F aus, wobei der Celsius-Wert genau so bleibt, wie er angegeben wurde, und der Fahrenheit-Wert so ausgegeben wird, wie Python ihn berechnet. Runde die Zahlen nicht und formatiere sie nicht. Die zwei Zeilen, die der Treiber ausgibt, lauten:
25°C is 77.0°F
37.0°C is 98.6°FProbier es selbst
# TODO: Importiere die Klasse Temperature aus dem Modul temperature
# Teste die Klasse:
# TODO: Erstelle eine Temperaturinstanz mit 25°C
temp = None # Durch eine echte Temperature-Instanz ersetzen
# TODO: Gib sowohl den Celsius- als auch den Fahrenheit-Wert aus
# TODO: Verwende das Format: "25°C is 77.0°F" (gib beide Werte unverändert aus, ohne Rundung oder Formatierung)
# TODO: Stelle die Temperatur auf 98.6°F ein
# 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 Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktormethode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDie super()-FunktionMethodenüberschreibungMehrfachvererbungMethodenauflösungsreihenfolgeWiederholung – Mitarbeiterhierarchie7Spezielle Methoden
Einführung in magische MethodenOperatorüberladungMagische Methoden für ContainerRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungsservice2Dekoratoren
Einführung in DekoratorenProperty-DekoratorDekorator für statische MethodenDekorator für Klassenmethoden5Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypingAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische Methoden und KlassenmethodenKlassen-DekoratorenKontextmanager3Klassenattribute
Instanz- vs. KlassenvariablenProperty-DecoratorsPrivate AttributeWiederholung – Bankkontoverwaltung6Kapselung
Öffentliche, geschützte, private MemberZugriffsmodifikatorenInformationsverbergungProperty-Decorators – FortgeschrittenWiederholung – System zur Verwaltung von Studentendaten12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und BenutzerklassenAusleihsystemSuchfunktionAdministrationsoberflächeTests und IntegrationÜbe selbstständig: Online-Python-Compiler