Property-Dekorator
Teil des Abschnitts Objektorientierte Programmierung der Python-Journey von Coddy. Lektion 10 von 64.
Der @property-Decorator ermöglicht es Ihnen, auf Methoden wie auf Attribute zuzugreifen, was einen sauberen Weg bietet, Werte abzufragen und zu setzen. Dies ist nützlich für die Kapselung, da es Ihnen erlaubt, Validierungslogik oder berechnete Werte hinzuzufügen, ohne die öffentliche Schnittstelle Ihrer Klasse zu ändern.
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 ** 2Beachten Sie, dass wir self._radius verwenden, um den tatsächlichen Wert zu speichern. Wenn wir self.radius innerhalb des Getters verwenden würden, würde dies die Getter-Methode erneut aufrufen, was zu unendlicher Rekursion führen würde.
Erstellen Sie einen Kreis und greifen Sie auf Eigenschaften zu:
my_circle = Circle(5)Greifen Sie wie auf reguläre Attribute auf Properties zu:
print(my_circle.radius)
print(my_circle.area)Ausgabe:
5
78.53975Beachten Sie, dass Sie keine Klammern () verwenden, wenn Sie auf Eigenschaften zugreifen – sie sehen aus wie Attribute, führen aber Methodencode aus.
Füge einen Setter hinzu, um das Ändern von Werten mit Validierung 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 kannst du den Radius wie ein Attribut festlegen:
my_circle = Circle(5)
my_circle.radius = 10 # Verwendet den Setter
print(my_circle.radius) # Verwendet den GetterAusgabe:
10Wichtiger Punkt: @property lässt Methoden wie Attribute aussehen, während @property_name.setter Ihnen ermöglicht, die Zuweisung von Werten zu steuern, was Datenvalidierung und Kapselung ermöglicht.
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese 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