Seite 1 von 1

Decorator: Wert einer Instanz cachen?

Verfasst: Mittwoch 20. Mai 2009, 11:56
von CM
Hoi

Ich würde gerne diesen Dekorator verwenden. Nur, dass mir nicht daran liegt die Übergabewerte für die Funktion zu cachen, sondern als Schlüssel die Werte einer Instanz meiner Klasse zu nehmen. Beispiel:

Code: Alles auswählen

class Foo(object):
    def __init__(self, value):
        self.value = value
    def bar(self. arg1, arg2):
        pass
Jetzt möchte ich gerne so dekorieren, dass der Aufruf von

Code: Alles auswählen

foo = Foo(42)
foo.bar(*args)
kontroliert, ob foo.value, bereits im Cache ist. Wie kann man das erreichen?

Gruß,
Christian

Verfasst: Mittwoch 20. Mai 2009, 13:39
von Dill
keine ahnung ob das mit diesem dekorator geht.

wenn ja, dann ist das doch eher nen hack.
ich würde das multiton pattern implementieren.

Verfasst: Mittwoch 20. Mai 2009, 14:16
von EyDu
Vielleicht ist es zu offensichtlich, aber wie wäre es mit einem Klassenattribut?

Sonst hat man auch noch die __call__-Methode der Metaklassen, wenn es denn mal ganz ausgefallen werden soll.

Verfasst: Mittwoch 20. Mai 2009, 15:24
von CM
Vielen Dank!

Ich war gerade mal draussen - ist ja auch schön heute - und das klärt den Kopf. Also habe ich mich entschlossen nicht hintendrum zu implementieren, sondern der Klasse einen Cache zu geben, so dass die Instanz weiß, welchen Status sie schon mal hatte. - Was in diesem Fall schon einigen Aufwand bedeutet. - Das ist in gewisser Weise ähnlich dem multiton Pattern, zumindest im Effekt.

Gruß,
Christian