Dynamische Eigenschaften zu Klassen hinzufügen
Bei der Suche nach der Simulation eines Datenbank-Ergebnissatzes mithilfe von Scheinklassen entsteht eine Herausforderung: Wie werden dynamische Eigenschaften zugewiesen? Eigenschaften zu einer Instanz hinzufügen, die denen eines Wörterbuchs ähneln. Dabei geht es darum, Eigenschaften zu erstellen, die sich wie Attribute mit bestimmten Werten verhalten.
Anfangs bestand ein vielversprechender Ansatz darin, Eigenschaften zuzuweisen mit:
setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))
Dies führte jedoch zu Eigenschaftsobjekten anstelle des gewünschten Verhaltens.
Die Lösung liegt im Hinzufügen von Eigenschaften zur Klasse selbst und nicht zu einzelnen Instanzen. So funktioniert es:
class Foo(object): pass foo = Foo() foo.a = 3 Foo.b = property(lambda self: self.a + 1) print(foo.b) # Prints 4
In diesem Beispiel fügen wir mithilfe des Eigenschaftsdeskriptors eine Eigenschaft b zur Klasse Foo hinzu. Beim Zugriff auf foo.b ruft Python die Methode __get__ des Deskriptors auf und übergibt die Klasseninstanz als Argument. Die __get__-Methode gibt dann den Wert der Eigenschaft zurück, der als self.a 1 berechnet wird.
Eigenschaften bieten eine bequeme Möglichkeit, benutzerdefiniertes Verhalten für Attribute zu definieren und so die Struktur des OO-Systems von Python effektiv offenzulegen.
Das obige ist der detaillierte Inhalt vonWie füge ich dynamische Eigenschaften zu Klassen wie Wörterbucheinträgen hinzu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!