Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. def alert(cls):
  2. def wrapper(method):
  3. @functools.wraps(method)
  4. def inner(*args, **kwargs):
  5. print('entering {method.__qualname__}')
  6. r = method(*args, **kwargs)
  7. print('exiting {method.__qualname__}')
  8. return r
  9. return inner
  10. namespace = {}
  11. for k, v in cls.__dict__.items():
  12. if isinstance(v, (types.MethodType, types.FunctionType)):
  13. namespace[k] = wrapper(v)
  14. else:
  15. namespace[k] = v
  16. return type(cls.__name__, cls.__bases__, namespace)
  17.  
  18. @alert
  19. class mydict(dict):
  20. def __getitem__(self, key):
  21. return super().__getitem__(key)
  22.  
  23. def wrapper(method):
  24. @functools.wraps(method)
  25. def inner(*args, **kwargs):
  26. print('entering {method.__qualname__}')
  27. r = method(*args, **kwargs)
  28. print('exiting {method.__qualname__}')
  29. return r
  30. return inner
  31.  
  32.  
  33. class alertmeta(type):
  34. def __prepare__(*args, **kwargs):
  35.  
  36. class prepdict(dict):
  37. def __setitem__(self, k, v):
  38. if isinstance(v, (types.MethodType, types.FunctionType)):
  39. v = wrapper(v)
  40. super().__setitem__(k, v)
  41. return prepdict()
  42.  
  43. def __new__(metacls, cls, bases, namespace):
  44. return super().__new__(metacls, cls, bases, namespace)
  45.  
  46.  
  47. class mydict(dict, metaclass=alertmeta):
  48. def __getitem__(self, key):
  49. return super().__getitem__(key)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement