Ein Deskriptor ist eine Klasse mit den folgenden Methoden.
Methode | Anruf-Timing |
---|---|
get(self,obj,type) | Beim Abrufen von Attributen |
set(self,obj,value) | Beim Festlegen von Attributen |
delete(self,obj) | Beim Löschen eines Attributs |
Da es sich um eine andere Methode als spezielle Methoden wie getattr und setattr handelt, muss sie getrennt vom Deskriptor erkannt werden.
-Verhalten in Bezug auf Attributoperationen kann auf eine andere Klasse ausgeschnitten werden (= Attributbezogene Funktionen, die sich über Klassen erstrecken und wiederverwendet werden können) -Kann Verhalten definieren, das nur für bestimmte Attribute gilt. (getattr, setattr wirkt sich auf alle Attribute dieser Klasse aus)
Es gibt ein Verdienst der Schüssel. Deskriptoren werden auch hinter Eigenschaften, Klassen / statischen Methoden, Super usw. verwendet.
descriptor_basic.py
#Definition des Deskriptors
class LogProp:
def __init__(self,name): #1
self.name = name #1
#Verarbeitung beim Abrufen von Attributen
def __get__(self,obj,type): #2
prin(f'{self.name}:get') #2,6
return obj.__dict__[self.name] #2,4
#Verarbeitung beim Setzen von Attributen
def __set__(self,obj,value) #3
prin(f'{self.name}:set{value}') #3,7
obj.__dict__[self.name] = value #3,5
class App:
#Definition des Deskriptors
title = LogProp('title') #8
if __name__ == '__main__':
app = App()
app.title = 'Python zum Selbststudium' #9
print(app.title) #9
Die Deskriptorseite definiert init, get, set. Zunächst empfängt und speichert die Methode init (# 1) den Attributnamen, der das Ziel des Deskriptors ist. Dies ist die Schlüsselinformation für die spätere Übergabe von Werten.
Und set (# 2), get (# 3) sind die Hauptmethoden zum Übergeben von Werten. get und set erhalten die folgenden Informationen über Argumente.
obj: Zielinstanz Typ: Zielklasse Wert: Wert übergeben
In diesem Beispiel wird der Wert der Instanz über dict abgerufen und referenziert. Da get und set die Attributoperation der Instanz übernehmen, ist die Erfassung und Einstellung des Attributwerts ungültig, wenn keine Operation zum Erfassen oder Speichern eines Werts vorhanden ist.
Minimieren Sie die Beschreibung wie # 4,5 im Code und fügen Sie beim Abrufen und Einstellen zusätzliche Operationen hinzu. In diesem Beispiel wird das Ergebnis der Erfassung und Einstellung per Druck ausgegeben.
Verwenden Sie # 8, um einem Attribut einen vordefinierten Deskriptor zuzuordnen. (Auf diese Weise schreiben Sie eine Eigenschaft mit einer Eigenschaftsfunktion.)
Sie können bestätigen, dass das Protokoll zum Zeitpunkt der Ausgabe ausgegeben wird, wenn Sie den Titel wie # 9 im Code und in sy festlegen.
Python zum Selbststudium Zitiert aus Kapitel 11 Objektorientierte Syntax
Recommended Posts