Heim > Backend-Entwicklung > Python-Tutorial > Wie füge ich dynamische Eigenschaften zu Klassen wie Wörterbucheinträgen hinzu?

Wie füge ich dynamische Eigenschaften zu Klassen wie Wörterbucheinträgen hinzu?

Linda Hamilton
Freigeben: 2024-11-12 10:55:03
Original
776 Leute haben es durchsucht

How to Add Dynamic Properties to Classes like Dictionary Entries?

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))
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage