?
def origcache(f,size=3):
def g(*args,**kwds):
#print(*args, **kwds)
print('Calling decorated function',size)
return f(*args, **kwds)
return g
metaCache={}
def cache(f):
def g(*args,**kwds):
try:
return metaCache[(f,args[0])](*args[1:],**kwds)
except KeyError:
print("defining")
newf=origcache(f,size=args[0].s)
metaCache[(f,args[0])]=newf
return newf(*args[1:],**kwds)
else:
return
return g
class A():
def __init__(self):
self.s=5
@cache
def f(x):
return str(x)+"aa"
a=A()
print(a.f(2))
print(a.f(2))