_decorator.py 483 B

1234567891011121314151617181920212223242526272829
  1. def cache(f):
  2. def wrapper(*args):
  3. if not hasattr(f, 'cache'):
  4. f.cache = {}
  5. key = args
  6. if key not in f.cache:
  7. f.cache[key] = f(*args)
  8. return f.cache[key]
  9. return wrapper
  10. @cache
  11. def fib(n):
  12. if n < 2:
  13. return n
  14. return fib(n-1) + fib(n-2)
  15. assert fib(32) == 2178309
  16. class A:
  17. def __init__(self, x):
  18. self._x = x
  19. @property
  20. def x(self):
  21. return self._x
  22. a = A(1)
  23. assert a.x == 1