2016-06-25 8 views
1

So habe ich eine Webanwendung, wo gibt es ein bestimmtes Datenbankobjekt mit Attributen, die ich in einem redis speichern möchten. Relativ einfach wie unten mit etwas manuell zu tun:Geeignet __setattr__ Methode für zugeordnete Objekte ändern

db_object.update({<attribute>: <value>}) 
redis.set(db_object.id, <value>) 

Das hier Problem ist, dass es ein Attribut ist, das an vielen Orten in der gesamten Codebasis geändert wird. Das bedeutet nicht, dass dieser Ansatz nicht funktioniert, sondern nur, dass Code sehr repetitiv ist. Ich hätte lieber einen Wrapper für den Cache, auf den ich jederzeit direkt zugreifen kann. Dies bedeutet, dass jedes Mal, wenn ich das bestimmte Attribut ändern Ich bin interessiert Ich habe meinen redis speichern, theoretisch wie aktualisieren möchte so:

def __setattr__(self, name, value): 
    self.__dict__[name] = value 
    if name == <attribute>: 
     redis.set(self.id, value) 

, die alle meine Probleme lösen würde. Das einzige Problem ist, dass, wie detailliert here kann ich nicht direkt die in gemappten Objekten ändern. Wie kann ich den gleichen Effekt erzielen?

Antwort

0

Einen netten Weg gefunden, dies auf eine andere Frage zu nähern. Kann nur anstelle der Super-Methode aufrufen, der direkt __dict__

Methode unten hat die gewünschte Wirkung zu verändern:

def __setattr__(self, name, value): 
    if name == <attribute>: 
     redis.set(self.id, value) 
    super(Dataset, self).__setattr__(name, value) 
Verwandte Themen