Je veux créer un décorateur qui fonctionne comme une propriété, seulement il appelle la fonction décorée qu'une seule fois, et sur les appels suivants renvoient toujours le résultat du premier appel. Un exemple:Comment créer décorateur pour l'initialisation paresseuse d'une propriété
def SomeClass(object):
@LazilyInitializedProperty
def foo(self):
print "Now initializing"
return 5
>>> x = SomeClass()
>>> x.foo
Now initializing
5
>>> x.foo
5
Mon idée était d'écrire un décorateur personnalisé pour cela. Donc, j'ai commencé, et voici jusqu'où je suis:
class LazilyInitializedProperty(object):
def __init__(self, function):
self._function = function
def __set__(self, obj, value):
raise AttributeError("This property is read-only")
def __get__(self, obj, type):
# problem: where to store the value once we have calculated it?
Comme vous pouvez le voir, je ne sais pas où stocker la valeur en cache. La solution la plus simple semble être de maintenir juste un dictionnaire, mais je me demande s'il y a une solution plus élégante pour cela.
EDIT Désolé pour cela, j'ai oublié de mentionner que je veux que la propriété soit en lecture seule.
Cela pourrait être un double de ma question: [Python décorateur propriété paresseux] (http://stackoverflow.com/questions/3012421/python-lazy-property-decorator) – detly
Vous avez raison, il est. Je ne l'ai pas vu dans la boîte à suggestions. Voter pour fermer. –