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
Linda HamiltonOriginal
2024-11-12 10:55:03785Durchsuche

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))

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!

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