Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def alert(cls):
- def wrapper(method):
- @functools.wraps(method)
- def inner(*args, **kwargs):
- print('entering {method.__qualname__}')
- r = method(*args, **kwargs)
- print('exiting {method.__qualname__}')
- return r
- return inner
- namespace = {}
- for k, v in cls.__dict__.items():
- if isinstance(v, (types.MethodType, types.FunctionType)):
- namespace[k] = wrapper(v)
- else:
- namespace[k] = v
- return type(cls.__name__, cls.__bases__, namespace)
- @alert
- class mydict(dict):
- def __getitem__(self, key):
- return super().__getitem__(key)
- def wrapper(method):
- @functools.wraps(method)
- def inner(*args, **kwargs):
- print('entering {method.__qualname__}')
- r = method(*args, **kwargs)
- print('exiting {method.__qualname__}')
- return r
- return inner
- class alertmeta(type):
- def __prepare__(*args, **kwargs):
- class prepdict(dict):
- def __setitem__(self, k, v):
- if isinstance(v, (types.MethodType, types.FunctionType)):
- v = wrapper(v)
- super().__setitem__(k, v)
- return prepdict()
- def __new__(metacls, cls, bases, namespace):
- return super().__new__(metacls, cls, bases, namespace)
- class mydict(dict, metaclass=alertmeta):
- def __getitem__(self, key):
- return super().__getitem__(key)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement