„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 08.11.2024
Durchsuche:533

How to Add Dynamic Properties to Classes like Dictionary Entries?

Hinzufügen dynamischer Eigenschaften zu Klassen

Bei der Suche nach der Simulation eines Datenbankergebnissatzes mithilfe von Scheinklassen entsteht eine Herausforderung: Wie werden dynamische Eigenschaften zugewiesen? Eigenschaften zu einer Instanz hinzufügen, die denen eines Wörterbuchs ähneln. Dabei werden Eigenschaften erstellt, 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 Python-OO-Systems effektiv offenzulegen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3