Python property()-Funktion
Python3 integrierte Funktionen
property()Es ist eine in Python integrierte Funktion, mit der Eigenschaften erstellt werden.
property ist ein leistungsstarker Mechanismus, der es uns ermöglicht, Code auszuführen, wenn auf Attribute zugegriffen wird. Er wird häufig verwendet, um erweiterte Funktionen wie berechnete Eigenschaften und Datenvalidierung zu implementieren.
Wortdefinitionen: property 意为"属性",用于定义类的属性。
Grundlegende Syntax und Parameter
Syntaxformat
property(fget=None, fset=None, fdel=None, doc=None)
Parameterbeschreibung
- Parameter fget(optional):
- Typ: Funktion
- Beschreibung: Die Funktion, die beim Abrufen des Eigenschaftswerts aufgerufen wird.
- Parameter fset(optional):
- Typ: Funktion
- Beschreibung: Die Funktion, die beim Festlegen des Eigenschaftswerts aufgerufen wird.
- Parameter fdel(optional):
- Typ: Funktion
- Beschreibung: Die Funktion, die beim Löschen der Eigenschaft aufgerufen wird.
- Parameter doc(optional):
- Typ: String
- Beschreibung: Der Docstring der Property.
Funktionsbeschreibung
- Rückgabewert: Gibt ein Property-Objekt zurück.
- Merkmale: Lässt den Property-Zugriff wie eine normale Variable aussehen, führt aber tatsächlich eine Funktion aus.
Beispiele
Beispiel 1: Grundlegende Verwendung
Beispiel
class Circle:
def __init__(self, radius):
self.radius = radius
# Property verwenden, um berechnete Eigenschaften zu erstellen
def get_area(self):
"""Berechne die Fläche eines Kreises."""
return 3.14159 * self.radius ** 2
def set_radius(self, value):
"""Setzt den Radius (Validierung kann hinzugefügt werden)."""
if value < 0:
raise ValueError(Radius darf nicht negativ sein)
self.radius = value
# Property erstellen
area = property(get_area, set_radius)
# Verwendung
c = Circle(5)
print(fRadius: {c.radius}) # Ausgabe: Radius: 5
print(fFläche: {c.area}) # Ausgabe: Fläche: 78.53975
# Eigenschaft setzen
c.radius = 10
print(fNeue Fläche: {c.area}) # Ausgabe: Neue Fläche: 314.159
# Überprüfen
c.radius = -5 # Löst eine Ausnahme aus
def __init__(self, radius):
self.radius = radius
# Property verwenden, um berechnete Eigenschaften zu erstellen
def get_area(self):
"""Berechne die Fläche eines Kreises."""
return 3.14159 * self.radius ** 2
def set_radius(self, value):
"""Setzt den Radius (Validierung kann hinzugefügt werden)."""
if value < 0:
raise ValueError(Radius darf nicht negativ sein)
self.radius = value
# Property erstellen
area = property(get_area, set_radius)
# Verwendung
c = Circle(5)
print(fRadius: {c.radius}) # Ausgabe: Radius: 5
print(fFläche: {c.area}) # Ausgabe: Fläche: 78.53975
# Eigenschaft setzen
c.radius = 10
print(fNeue Fläche: {c.area}) # Ausgabe: Neue Fläche: 314.159
# Überprüfen
c.radius = -5 # Löst eine Ausnahme aus
Erwartete Ausgabe:
半径: 5 面积: 78.53975 新面积: 314.159
Code-Erklärung:
- Mit property können Sie berechnete Eigenschaften definieren.
- Der Setter kann Logik zur Datenvalidierung hinzufügen.
Beispiel 2: Verwendung des @property-Dekorators (empfohlen)
Beispiel
class Student:
def __init__(self, name, score):
self.name = name
self._score = score
@property
def score(self):
"""Punktzahl abrufen"""
return self._score
@score.setter
def score(self, value):
"""Punktzahl setzen (mit Validierung)"""
if not 0 <= value <= 100:
raise ValueError(Punktzahl muss zwischen 0 und 100 liegen)
self._score = value
@property
def grade(self):
"""Berechne Note basierend auf Punktzahl"""
if self._score >= 90:
return 'A'
elif self._score >= 80:
return 'B'
elif self._score >= 70:
return 'C'
elif self._score >= 60:
return 'D'
else:
return 'F'
# Verwendung
s = Student("Tom", 85)
print(s.name) # Ausgabe: Tom
print(s.score) # Ausgabe: 85
print(s.grade) # Ausgabe: B
s.score = 92 # Punktzahl festlegen
print(s.grade) # Ausgabe: A
s.score = 105 # Löst eine Ausnahme aus
def __init__(self, name, score):
self.name = name
self._score = score
@property
def score(self):
"""Punktzahl abrufen"""
return self._score
@score.setter
def score(self, value):
"""Punktzahl setzen (mit Validierung)"""
if not 0 <= value <= 100:
raise ValueError(Punktzahl muss zwischen 0 und 100 liegen)
self._score = value
@property
def grade(self):
"""Berechne Note basierend auf Punktzahl"""
if self._score >= 90:
return 'A'
elif self._score >= 80:
return 'B'
elif self._score >= 70:
return 'C'
elif self._score >= 60:
return 'D'
else:
return 'F'
# Verwendung
s = Student("Tom", 85)
print(s.name) # Ausgabe: Tom
print(s.score) # Ausgabe: 85
print(s.grade) # Ausgabe: B
s.score = 92 # Punktzahl festlegen
print(s.grade) # Ausgabe: A
s.score = 105 # Löst eine Ausnahme aus
Erwartete Ausgabe:
Tom 85 B A
Code-Erklärung:
- Der @property-Dekorator ist eine pythonischere Art, dies zu schreiben.
- Du kannst Getter, Setter und Deleter definieren.
Beispiel 3: Nur-Lese-Eigenschaft
Beispiel
class Person:
def __init__(self, name):
self._name = name
@property
def name(self):
"""Nur-Lese-Eigenschaft"""
return self._name
# Ohne einen Setter kann die Eigenschaft nicht geändert werden
p = Person("Tom")
print(p.name) # Ausgabe: Tom
# Der Versuch, sie zu ändern, löst einen Fehler aus (kein Setter)
# p.name = "Jack" # löst AttributeError aus
# Das Löschen löst ebenfalls einen Fehler aus
# del p.name # wird AttributeError auslösen
def __init__(self, name):
self._name = name
@property
def name(self):
"""Nur-Lese-Eigenschaft"""
return self._name
# Ohne einen Setter kann die Eigenschaft nicht geändert werden
p = Person("Tom")
print(p.name) # Ausgabe: Tom
# Der Versuch, sie zu ändern, löst einen Fehler aus (kein Setter)
# p.name = "Jack" # löst AttributeError aus
# Das Löschen löst ebenfalls einen Fehler aus
# del p.name # wird AttributeError auslösen
Erwartete Ausgabe:
Tom
Indem Sie nur einen Getter und keinen Setter definieren, können Sie eine schreibgeschützte Eigenschaft erstellen.
Python3 integrierte Funktionen
Andere Erweiterungen