Python property()-Funktion

Python3 内置函数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

Erwartete Ausgabe:

半径: 5
面积: 78.53975
新面积: 314.159

Code-Erklärung:

  1. Mit property können Sie berechnete Eigenschaften definieren.
  2. 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

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

Erwartete Ausgabe:

Tom

Indem Sie nur einen Getter und keinen Setter definieren, können Sie eine schreibgeschützte Eigenschaft erstellen.


Python3 内置函数Python3 integrierte Funktionen


Andere Erweiterungen