Heim >Backend-Entwicklung >Python-Tutorial >Wie funktionieren die Methoden „__get__' und „__set__' von Python-Deskriptoren?

Wie funktionieren die Methoden „__get__' und „__set__' von Python-Deskriptoren?

DDD
DDDOriginal
2024-11-26 15:57:13849Durchsuche

How Do Python Descriptors' `__get__` and `__set__` Methods Work?

Python-Deskriptoren verstehen: get und set

In Python sind Deskriptoren ein leistungsstarker Mechanismus, der das Abfangen von Objekten ermöglicht Attributzugriff und -änderung. Um ihre Funktionalität zu verstehen, schauen wir uns den bereitgestellten Code genauer an:

class Celsius(object):
    def __init__(self, value=0.0):
        self.value = value
    def __get__(self, instance, owner):
        return self.value
    def __set__(self, instance, value):
        self.value = float(value)

class Temperature(object):
    celsius = Celsius()

F1: Warum brauche ich eine Deskriptorklasse?

A1: Eine Deskriptorklasse kapselt die Logik hinter dem Abfangen von Attributzugriffen und -änderungen. Durch die Trennung dieser Logik von der Klasse, die sie verwendet, können Sie sie wiederverwenden und eine konsistente Schnittstelle für den Zugriff auf und die Änderung von Attributen bereitstellen.

F2: Was sind Instanz und Besitzer in __get__?

A2:

  • Instanz: Beim Zugriff auf ein Attribut dieser Parameter stellt die Instanz der Klasse dar, die den Deskriptor besitzt (z. B. temp in temp.celsius).
  • Besitzer: Dieser Parameter gibt die Klasse an, die den Deskriptor definiert (z. B. Temperatur).

F3: Wie würde ich das nennen/verwenden? Beispiel?

A3: Sie können wie folgt auf das Celsius-Attribut zugreifen und es ändern:

temp = Temperature()
temp.celsius  # calls `celsius.__get__` and returns the current Celsius value
temp.celsius = 25.0  # calls `celsius.__set__` to update the Celsius value

Hinweis: Wenn Sie versuchen, direkt auf Temperature.celsius zuzugreifen, lautet die Instanz None.

Das obige ist der detaillierte Inhalt vonWie funktionieren die Methoden „__get__' und „__set__' von Python-Deskriptoren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn