Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.95 KB | None | 0 0
  1. In [79]: _cache = {}
  2.  
  3. In [80]: def cached(cls):
  4.     ...:     from functools import wraps
  5.     ...:     import inspect
  6.     ...:     sig = inspect.signature(cls)
  7.     ...:     @wraps(cls)
  8.     ...:     def wrapped(*args, **kwargs):
  9.     ...:         bound_values = sig.bind(*args, **kwargs)
  10.     ...:         bound_values.apply_defaults()
  11.     ...:         s = frozenset(bound_values.arguments.items())
  12.     ...:         if s in _cache:
  13.     ...:             return _cache[s]
  14.     ...:         _cache[s] = cls(*args, **kwargs)
  15.     ...:         return _cache[s]
  16.     ...:     return wrapped
  17.     ...:
  18.  
  19. In [81]: @cached
  20.     ...: class Spam:
  21.     ...:     def __init__(self, x, y, z=None):
  22.     ...:         self.x = x
  23.     ...:         self.y = y
  24.     ...:         self.z = z
  25.     ...:        
  26.  
  27. In [82]: s1 = Spam(10, 20)
  28.  
  29. In [83]: s2 = Spam(x=10, y=20)
  30.  
  31. In [84]: s1 is s2
  32. Out[84]: True
  33.  
  34. In [85]: s3 = Spam(x=10, y=20, z=None)
  35.  
  36. In [86]: s2 is s3
  37. Out[86]: True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement